|
|
(2 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
| == The Original Code ==
| | #REDIRECT [[ist:Code Generation/Example 2]] |
| | |
| Consider the following [[S9 (language)|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 ==
| |
| | |
| 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
| |
| | |
| [[category:Compiladores]]
| |
| [[category:Ensino]]
| |