Code Generation/Example 2: Difference between revisions
From Wiki**3
< Code Generation
Line 24: | Line 24: | ||
ALIGN | ALIGN | ||
LABEL a | LABEL a | ||
SADDR _L123 ;; automatic label | |||
;--- this is the main function (note that "s9" translates to RTS's "_main") | ;--- this is the main function (note that "s9" translates to RTS's "_main") | ||
Line 34: | Line 34: | ||
ADDR a | ADDR a | ||
LDINT | |||
EXTRN prints | EXTRN prints | ||
CALL prints | CALL prints | ||
Line 40: | Line 40: | ||
INT 0 | INT 0 | ||
STFVAL32 | |||
LEAVE | LEAVE | ||
RET | RET |
Revision as of 22:25, 1 May 2018
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:
Postfix code |
---|
<asm>
RODATA ALIGN LABEL _L123 ;; automatic label STR "batata"
DATA ALIGN LABEL a SADDR _L123 ;; automatic label
TEXT ALIGN GLOBL _main, FUNC LABEL _main ENTER 0 ADDR a LDINT EXTRN prints CALL prints TRASH 4 INT 0 STFVAL32 LEAVE RET </asm> |
Compiling and Running
To test the first example, the S9 compilation process is as follows:
s9 batata.s9 yasm -felf batata.asm ld -o batata batata.o -lrts
To test the second program directly, pf2asm can be used:
pf2asm batata.pf yasm -felf batata.asm ld -o batata batata.o -lrts