|
|
(7 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 ==
| |
| | |
| 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:Teaching]]
| |