Difference between revisions of "Code Generation/Example 2"

From Wiki**3

< Code Generation
(Postfix Code)
(Postfix Code)
Line 24: Line 24:
 
ALIGN
 
ALIGN
 
LABEL a
 
LABEL a
ID _L123  ;; automatic label
+
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
LOAD
+
LDINT
 
EXTRN prints
 
EXTRN prints
 
CALL prints
 
CALL prints
Line 40: Line 40:
  
 
INT 0
 
INT 0
POP
+
STFVAL32
 
LEAVE
 
LEAVE
 
RET
 
RET

Revision as of 00:25, 2 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>

--- declaring the string literal

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

--- declaring the global variable "a"

DATA ALIGN LABEL a SADDR _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

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