Difference between revisions of "Code Generation/Example 2"

From Wiki**3

< Code Generation
(Postfix Code)
Line 43: Line 43:
 
RET
 
RET
 
</asm>
 
</asm>
 +
 +
== Compiling and Running ==
 +
 +
If you start from the first example, the S9 compilation process is as follows:
 +
 +
* s9 batata.s9
 +
* yasm -felf batata.asm
 +
* ld -o batata batata.o -lrts
 +
 +
If you want to test the second program directly, you may use [[pf2asm]]:
 +
 +
* pf2asm batata.pf
 +
* yasm -felf batata.asm
 +
* ld -o batata batata.o -lrts
  
 
[[category:Compilers]]
 
[[category:Compilers]]
 
[[category:Teaching]]
 
[[category:Teaching]]

Revision as of 08:36, 25 May 2009

The Original Code

Consider the following S9 function:

<c> string a = "batata"; int s9() -> 0 {

     a!

} </c>

Postfix Code

The Postfix code for the above function is as follows:

<asm>

--- declaring the string literal

RODATA ALIGN LABEL _L123  ;; automatic label STR "batata"

--- declaring the global variable "a"

DATA ALIGN LABEL a ID _L123  ;; automatic label

--- this is the main function (note that "s9" translates to RTS's "_main")

TEXT ALIGN GLOBL _main, FUNC LABEL _main ENTER 0

ADDRV a  ;; ADDRV = ADDR+LOAD EXTRN prints CALL prints TRASH 4

INT 0 POP LEAVE RET </asm>

Compiling and Running

If you start from the first example, the S9 compilation process is as follows:

  • s9 batata.s9
  • yasm -felf batata.asm
  • ld -o batata batata.o -lrts

If you want to test the second program directly, you may use pf2asm:

  • pf2asm batata.pf
  • yasm -felf batata.asm
  • ld -o batata batata.o -lrts