Line 3: | Line 3: | ||
The C equivalent would be (roughly): | The C equivalent would be (roughly): | ||
− | <c> | + | <source lang="c"> |
int main() { | int main() { | ||
extern void printd(double); | extern void printd(double); | ||
Line 11: | Line 11: | ||
return 0; | return 0; | ||
} | } | ||
− | </ | + | </source> |
Note that this program's code does not necessarily correspond to any particular code generator output. | Note that this program's code does not necessarily correspond to any particular code generator output. | ||
{{CollapsedCode|Postfix code| | {{CollapsedCode|Postfix code| | ||
− | <asm> | + | <source lang="asm"> |
;;-- generation of the "_main" function | ;;-- generation of the "_main" function | ||
TEXT | TEXT | ||
Line 66: | Line 66: | ||
LEAVE | LEAVE | ||
RET | RET | ||
− | </ | + | </source> |
}} | }} | ||
== Compiling and Running == | == Compiling and Running == |
The following pure-Postfix program illustrates duplication of double-precision floating point numbers on the stack.
The C equivalent would be (roughly):
int main() {
extern void printd(double);
double d, e;
d = e = 3.3e-2;
printd(d + e);
return 0;
}
Note that this program's code does not necessarily correspond to any particular code generator output.
Postfix code |
---|
;;-- generation of the "_main" function
TEXT
ALIGN
GLOBAL _main, FUNC
LABEL _main
ENTER 16 ; d@-8 and e@-16
;;-- put double literal in RODATA
RODATA
ALIGN
LABEL _L123
SDOUBLE 3.3e-2
;;-- load literal onto stack
TEXT
ADDR _L123
LDDOUBLE
;;-- to perform the first assignment (to "e"), duplicate the value on the stack
DUP64
LOCAL -16 ; write value to "e"
STDOUBLE
;;-- to perform the second assignment (to "d"), duplicate the value on the stack
DUP64
LOCAL -8 ; write value to "d"
STDOUBLE
;;-- the assignments are an instruction: trash the value left on the stack
TRASH 8
;;-- now to perform the add operation
LOCAL -8
LDDOUBLE ; load "d"
LOCAL -16
LDDOUBLE ; load "e"
DADD ; leaves result on the stack
EXTERN printd
CALL printd
TRASH 8 ; argument value no longer needed
INT 0
STFVAL32
LEAVE
RET
|
Assuming that the code above is in file dbl.pf, the following commands would compile and run the program:
pf2asm dbl.pf yasm -felf dbl.asm ld -o dbl dbl.o -lrts ./dbl