## The Original Code

Consider the following C function:

```int main() {
int n = 45, i = 0, j = 1, *seg = &i;
while (n-- > 0) {
print(*seg = i + j);
seg = (seg == &i) ? &j : &i;
}
return 0;
}
```

## Postfix Code

The Postfix code for the above function is as follows:

Postfix code
```TEXT
ALIGN
GLOBAL "main",FUNC
LABEL "main"
ENTER 16    ; n@-4, i@-8, j@-12, seg@-16

;-- initialization:
INT 45
LOCA -4          ; n = 45
INT 0
LOCA -8          ; i = 0
INT 1
LOCA -12         ; j = 1
LOCAL -8         ; &i
LOCA -16         ; seg = &i

;-- while cycle:
LABEL "while"
LOCAL -4          ; &n
LDINT
DUP32              ; n (because of n--)
INT 1
SUB              ; n-1
LOCAL -4
STINT          ; n = n-1
INT 0
GT               ; n > 0 (n before decrement)
JZ "endwhile"
LOCAL -8          ; &i
LDINT          ; i
LOCAL -12         ; &j
LDINT         ; j
DUP32              ; same value (for assignment)
LOCAL -16         ; &seg
LDINT         ; seg
STINT            ; *seg = i+j
CALL "print"     ; we assume that "print" does not return any value
TRASH 4          ; trash argument (int)

;-- compute trenary operator's value
LOCAL -16         ; &seg
LDINT         ; seg
LOCAL -8         ; &i
EQ               ; seg == &i
LOCAL -12        ; &j

LABEL "false3"
LOCAL -8         ; &i

LABEL "end3"
DUP32              ; trenary operator's value (duplicated because of assignment)
LOCAL -16
STINT         ; seg = (seg == &i) ? &j : &i
TRASH 4          ; trash assignment's value, since we used it as an instruction

JMP "while"      ; restart while cycle

LABEL "endwhile"

;-- rest of function
INT 0
STFVAL32              ; return value is 0
LEAVE
RET
```