(→Postfix Code) |
(→Postfix Code) |
||
Line 27: | Line 27: | ||
;; i = dim-2 | ;; i = dim-2 | ||
LOCAL 12 | LOCAL 12 | ||
− | + | LDINT | |
INT 2 | INT 2 | ||
SUB | SUB | ||
− | + | DUP32 | |
LOCAL -8 | LOCAL -8 | ||
− | + | STINT | |
TRASH 4 | TRASH 4 | ||
;; res = x + dim - 1 | ;; res = x + dim - 1 | ||
LOCAL 8 | LOCAL 8 | ||
− | + | LDINT | |
LOCAL 12 | LOCAL 12 | ||
− | + | LDINT | |
INT 4 | INT 4 | ||
MUL | MUL | ||
Line 47: | Line 47: | ||
MUL | MUL | ||
SUB | SUB | ||
− | + | DUP32 | |
LOCAL -4 | LOCAL -4 | ||
− | + | STINT | |
TRASH 4 | TRASH 4 | ||
Line 56: | Line 56: | ||
LABEL for | LABEL for | ||
LOCAL -8 | LOCAL -8 | ||
− | + | LDINT | |
INT 0 | INT 0 | ||
GE | GE | ||
Line 65: | Line 65: | ||
;; if test | ;; if test | ||
LOCAL 8 | LOCAL 8 | ||
− | + | LDINT ; x | |
LOCAL -8 | LOCAL -8 | ||
− | + | LDINT; i | |
INT 4 | INT 4 | ||
MUL | MUL | ||
ADD ; x+i | ADD ; x+i | ||
− | + | LDINT ; x[i] = *(x+i) | |
LOCAL -4 | LOCAL -4 | ||
− | + | LDINT ; res | |
− | + | LDINT ; *res | |
GT | GT | ||
Line 82: | Line 82: | ||
;; if block | ;; if block | ||
LOCAL 8 | LOCAL 8 | ||
− | + | LDINT ; x | |
LOCAL -8 | LOCAL -8 | ||
− | + | LDINT ; i | |
INT 4 | INT 4 | ||
MUL | MUL | ||
ADD ; x+i = &x[i] | ADD ; x+i = &x[i] | ||
− | + | DUP32 | |
LOCAL -4 | LOCAL -4 | ||
− | + | STINT ; res = &x[i] | |
TRASH 4 | TRASH 4 | ||
Line 100: | Line 100: | ||
LABEL forincr | LABEL forincr | ||
LOCAL -8 | LOCAL -8 | ||
− | + | LDINT ; i | |
− | + | DUP32 | |
INT 1 | INT 1 | ||
SUB | SUB | ||
LOCAL -8 | LOCAL -8 | ||
− | + | STINT | |
TRASH 4 | TRASH 4 | ||
Line 116: | Line 116: | ||
;; return | ;; return | ||
LOCAL -4 | LOCAL -4 | ||
− | + | LDINT ; res | |
− | + | STFVAL32 | |
LEAVE | LEAVE | ||
RET | RET |
Consider the following C function:
<c> int *click(int *x, int dim) {
int *res, i; for (i = dim-2, res = x+dim-1; i >= 0; i--) if (x[i] > *res) res = &x[i]; return res;
} </c>
The Postfix code for the above function is as follows:
Postfix code |
---|
{{{2}}} |
To compile the Postfix code directly, pf2asm can be used: