Considere a seguinte função em C:
int fun(int a, int b) {
int i = 10, c;
c = 20 * 1024 + i;
while (++i < a + b) {
if (a + b < 3 * i + 5) c += 2 * i;
}
return c;
}
O código Postfix correspondente ao código C é o seguinte (agradece-se a comunicação de questões relativas a este código).
Código Postfix |
---|
;;---- BB1 START ----
TEXT
ALIGN
GLOBAL fun, FUNC
LABEL fun
ENTER 8 ; i@-4 c@-8 a@+8 b@+12
INT 10
LOCA -4 ; i=10
INT 20
INT 1024
MUL
LOCAL -4
LDINT
ADD
DUP32
LOCAL -8
STINT ; c = ...
TRASH 4
;;---- BB1 END ----
;;---- BB2 START ----
ALIGN
LABEL while_test
LOCAL -4
LDINT
INT 1
ADD
DUP32
LOCAL -4
STINT ; ++i
LOCAL +8
LDINT
LOCAL +12
LDINT
ADD ; a + b
LT
JZ while_end
;;---- BB2 END ----
;;---- BB3 START ----
LOCAL +8
LDINT
LOCAL +12
LDINT
ADD ; a + b
INT 3
LOCAL -4
LDINT
MUL
INT 5
ADD
LT
JZ ifend
;;---- BB3 END ----
;;---- BB4 START ----
LOCAL -8
LDINT ; c
INT 2
LOCAL -4
LDINT
MUL ; 2 * i
ADD
DUP32
LOCAL -8 ; &c
STINT
TRASH 4
;;---- BB4 END ----
;;---- BB5 START ----
ALIGN
LABEL ifend
JMP while_test
;;---- BB5 END ----
;;---- BB6 START ----
ALIGN
LABEL while_end
LOCAL -8
LDINT ; c
STFVAL32
LEAVE
RET
;;---- BB6 END ----
|
Para compilar o código Postfix directamente, pode ser utilizada a ferramenta pf2asm (assumindo uma arquitectura Intel de 32 bits -- ix86):
pf2asm code.pf yasm -felf32 code.asm