(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++"> static...") |
(→Código Postfix (não optimizado)) |
||
Line 56: | Line 56: | ||
MUL | MUL | ||
ADD ; &v[i] | ADD ; &v[i] | ||
+ | LDDOUBLE ; v[i] | ||
INT 0 | INT 0 | ||
Line 62: | Line 63: | ||
DCMP | DCMP | ||
INT 0 | INT 0 | ||
− | GT | + | GT ; v[i] > 0 |
JZ ifend | JZ ifend | ||
Line 107: | Line 108: | ||
LOCAL -4 | LOCAL -4 | ||
+ | LDINT ; p | ||
JZ op3else | JZ op3else | ||
LOCAL -12 | LOCAL -12 |
Considere o seguinte código C++ (assuma que ponteiros e int ocupam 32 bits e que double ocupa 64 bits).
static double mop(double v[], int s) {
int p = 0;
double m = 0;
for (int i = 0; i < s; ++i) {
if (v[i] > 0) {
m = m + v[i];
++p;
}
}
return p ? m / p : 0;
}
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