(Created page with "{{TOCright}} == Problema == Considere o seguinte código C++ (assuma que ponteiros e '''int''' ocupam 32 bits e que '''double''' ocupa 64 bits). <source lang="c++"> double...") |
(→Código Postfix (não optimizado)) |
||
(3 intermediate revisions by the same user not shown) | |||
Line 17: | Line 17: | ||
== Código Postfix (não optimizado) == | == Código Postfix (não optimizado) == | ||
− | O código Postfix correspondente | + | O código Postfix correspondente ao código C++ é o seguinte (agradece-se a comunicação de questões relativas a este código). |
− | |||
− | |||
{{CollapsedCode|Código Postfix| | {{CollapsedCode|Código Postfix| | ||
Line 40: | Line 38: | ||
LABEL fortest | LABEL fortest | ||
+ | |||
+ | LOCAL -4 | ||
+ | LDINT ; i | ||
LOCAL +8 | LOCAL +8 | ||
Line 51: | Line 52: | ||
INT 0 | INT 0 | ||
LABEL op2end | LABEL op2end | ||
+ | |||
+ | LT ; i < ... | ||
JZ forend | JZ forend | ||
Line 89: | Line 92: | ||
STDOUBLE ; v[i] = 2*i | STDOUBLE ; v[i] = 2*i | ||
− | TRASH | + | TRASH 8 |
JMP ifend | JMP ifend | ||
Line 107: | Line 110: | ||
STDOUBLE ; v[i] = 0 | STDOUBLE ; v[i] = 0 | ||
− | TRASH | + | TRASH 8 |
LABEL ifend | LABEL ifend | ||
Line 120: | Line 123: | ||
LOCAL -4 | LOCAL -4 | ||
STINT ; i++ | STINT ; i++ | ||
− | TRASH | + | TRASH 4 |
JMP fortest | JMP fortest |
Considere o seguinte código C++ (assuma que ponteiros e int ocupam 32 bits e que double ocupa 64 bits).
double g[1024];
double *repeat(double *v) {
for (int i = 0; i < (v ? sizeof(g) / 8 : 0); i++) {
if (v[i] > 2 * i) v[i] = i;
else v[i] = 0;
}
return v;
}
O código Postfix correspondente ao código C++ é o seguinte (agradece-se a comunicação de questões relativas a este código).
[Expand] Código Postfix |
---|
Para compilar o código Postfix directamente, pode ser utilizada a ferramenta pf2asm (assumindo uma arquitectura de 32 bits):
pf2asm code.pf yasm -felf32 code.asm