Vários fragmentos simples com variáveis globais e ciclos.
Considere o seguinte código C (assuma que ponteiros e int ocupam 32 bits).
// gerar declarações:
extern void print(int);
int ix = 0; // variável global
// gerar fragmento de código C:
for (ix = 0; ix < 10; ix = ix + 1) print(ix);
O código Postfix correspondente ao código acima é o seguinte (agradece-se a comunicação de questões relativas a este código).
Código Postfix |
---|
EXTERN print
DATA
ALIGN
GLOBAL ix, OBJ
LABEL ix
SINT 0
TEXT
INT 0
DUP32
ADDR ix
STINT
TRASH 4
LABEL fortest
ADDR ix
LDINT
INT 10
LT
JZ forend
ADDR ix
LDINT
CALL print
TRASH 4
LABEL forincr
ADDR ix
LDINT
INT 1
ADD
DUP32
ADDR ix
STINT
TRASH 4
JMP fortest
LABEL forend
|
Considere o seguinte código C (assuma que ponteiros e int ocupam 32 bits).
// gerar declarações:
extern void print(int);
static int ix = 0;
// gerar fragmento de código C:
ix = 0;
while (ix < 10) {
print(ix = ix + 1);
}
O código Postfix correspondente ao código acima é o seguinte (agradece-se a comunicação de questões relativas a este código).
Código Postfix |
---|
EXTERN print
DATA
ALIGN
LABEL ix
SINT 0
TEXT
INT 0
DUP32
ADDR ix
STINT
TRASH 4
LABEL whiletest
ADDR ix
LDINT
INT 10
LT
JZ whileend
ADDR ix
LDINT
INT 1
ADD
DUP32
ADDR ix
STINT
CALL print
TRASH 4
JMP whiletest
LABEL whileend
|
Considere o seguinte código C (assuma que ponteiros e int ocupam 32 bits).
// gerar declarações:
extern void print(int);
static int ix = 0;
// gerar fragmento de código C:
ix = 0;
for (; ix < 10; ) {
print(ix = ix + 1);
}
O código Postfix correspondente ao código acima é o seguinte (agradece-se a comunicação de questões relativas a este código).
Código Postfix |
---|
EXTERN print
DATA
ALIGN
LABEL ix
SINT 0
TEXT
INT 0
DUP32
ADDR ix
STINT
TRASH 4
LABEL fortest
ADDR ix
LDINT
INT 10
LT
JZ forend
ADDR ix
LDINT
INT 1
ADD
DUP32
ADDR ix
STINT
CALL print
TRASH 4
LABEL forincr
JMP fortest
LABEL forend
|
Considere o seguinte código C (assuma que ponteiros e int ocupam 32 bits).
// gerar declarações:
extern void print(int);
static int ix = 0;
// gerar fragmento de código C:
ix = 0;
do {
print(ix = ix + 1);
} while (ix < 10);
O código Postfix correspondente ao código acima é o seguinte (agradece-se a comunicação de questões relativas a este código).
Código Postfix |
---|
EXTERN print
DATA
ALIGN
LABEL ix
SINT 0
TEXT
INT 0
DUP32
ADDR ix
STINT
TRASH 4
LABEL whilestart
ADDR ix
LDINT
INT 1
ADD
DUP32
ADDR ix
STINT
CALL print
TRASH 4
LABEL whiletest
ADDR ix
LDINT
INT 10
LT
JNZ whilestart
LABEL whileend
|