Kontakt
bild3 bild2 bild1
Skolan för
datavetenskap
och kommunikation

2D1375, projektet hösten 2005

Referensmaterial

Lämpligt referensmaterial om du kompilerar till Sparc-assembler är

Verktyg

Följande program är användbara
  • as: assemblerare för sparcassembler som du får tillgång till genom module add lang.
    Exempel: as hej.s # genererar hej.o
  • gcc: länkar objektfiler. Egentligen skulle det räcka att använda ld, men runtime-biblioteket för minijava använder rutiner från Cs standardbibliotek. Dessa länkas med automatiskt när man använder gcc men inte då man använder ld.
    Exempel: gcc hej.o -L /info/primp05/libsrc -l minijava # ger a.out
  • jasmin: assemblerar jasmin-assembler till bytekod. Verktyget finns i /info/primp05/jasmin/bin/.
    Exempel: jasmin hej.j # ger hej.class

Ett exempel

Som ett exempel på hur utmatningen från en kompilator kan se ut inluderar jag utmatningen från min lösning på programmet Factorial.java nedan:


$ java Main programs/Factorial.java
Compiling input file programs/Factorial.java into directory Factorial/
- Syntax analysis
  ...pretty printing --> Factorial.pretty
  ...abstract syntax tree --> Factorial.syntax
- Semantic analysis
  ...symbol table --> Factorial.symtab
- Intermediate representation
  ...treecode --> Factorial.tree
  ...canonical form --> Factorial.canon
- Instruction selection
  ...Sparc assembler --> Factorial.sparc
- Register allocation
  ...liveness analysis --> Factorial.live
  ...final assembly code --> Factorial.s
-Assembling and linking
 ..."as Factorial/Factorial.s" --> Factorial.o
 ..."gcc Factorial/Factorial.o -o Factorial/Factorial -L /info/primp05/libsrc -l minijava"
            --> Factorial
- Generating jasmin assembler
 ... --> Factorial.j
 ... --> Fac.j
- Assembling jasmin assembler to class files
 ..."jasmin -d Factorial Factorial/Factorial.j" --> Factorial.class
 ..."jasmin -d Factorial Factorial/Fac.j" --> Fac.class

Det är ingenting som säger att ni kommer att få samma assemblerkod som jag från er kompilator. Det går i själva verket att optimera min assemblerkod ganska mycket; jag har lagt upp ett exempel på handoptimerad assemblerkod och ett exempel på vad en mer avancerad registerallokering kan ge också. För kompilatorprojektet i denna kurs är det viktigaste att få fram något som går att köra genom att använda de principer Appel beskriver i sin bok; att optimera den genererade assemblerkoden är inte nödvändigt.

^ Upp till kursens hemsida.

Sidansvarig: Mikael Goldmann <migo@kth.se>
Uppdaterad: 2005-07-26