Skip to main content

Address-format code for Y=AB+(C/D)+E(F/G)

Short answer

For Y = AB+(C/D)+E(F/G), postfix is A B * C D / + E F G / * +. Three-address format uses 6 instructions (MUL, DIV, ADD, DIV, MUL, ADD). Two-address needs 11 instructions with initial MOVs. One-address accumulator code requires 12 instructions with temporaries T1, T2. Zero-address stack machine uses 14 instructions (PUSH, MUL, PUSH, DIV, ADD, PUSH, PUSH, DIV, MUL, ADD, POP). Instruction count increases as address fields decrease.

Write codes using 3, 2, 1 and 0 address instruction formats to perform the operation Y = AB+(C/D)+E(F/G).

Assumptions: the operands are memory locations, R1, R2, ... are CPU registers, T1, T2, ... are temporary memory locations, and Y receives the result. Multiplication and division are done before addition and subtraction, and equal-priority operators go left to right. Adjacent letters with no operator, or a letter before a bracket, are read as multiplication. So AB is A × B and E(F/G) is E × (F/G).

Fully bracketed: Y = ((AB)+(C/D))+(E(F/G)). Postfix (reverse Polish) form: A B * C D / + E F G / * +.

Three-address instructions (OP dest, src1, src2)

MUL R1, A, B    ; R1 = A * B
DIV R2, C, D    ; R2 = C / D
ADD R3, R1, R2  ; R3 = R1 + R2
DIV R4, F, G    ; R4 = F / G
MUL R5, E, R4   ; R5 = E * R4
ADD Y, R3, R5   ; Y = R3 + R5

Number of instructions: 6. Shortest program, but each instruction is long (three addresses).

Two-address instructions (OP dest, src; dest = dest OP src)

MOV R1, A   ; R1 = A
MUL R1, B   ; R1 = R1 * B
MOV R2, C   ; R2 = C
DIV R2, D   ; R2 = R2 / D
ADD R1, R2  ; R1 = R1 + R2
MOV R2, E   ; R2 = E
MOV R3, F   ; R3 = F
DIV R3, G   ; R3 = R3 / G
MUL R2, R3  ; R2 = R2 * R3
ADD R1, R2  ; R1 = R1 + R2
MOV Y, R1   ; Y = R1

Number of instructions: 11. A MOV is needed first because the destination operand is overwritten.

One-address instructions (accumulator AC is the implied operand)

LOAD A    ; AC = A
MUL B     ; AC = AC * B
STORE T1  ; T1 = AC
LOAD C    ; AC = C
DIV D     ; AC = AC / D
ADD T1    ; AC = AC + T1
STORE T2  ; T2 = AC
LOAD F    ; AC = F
DIV G     ; AC = AC / G
MUL E     ; AC = AC * E
ADD T2    ; AC = AC + T2
STORE Y   ; Y = AC

Number of instructions: 12. Intermediate results that cannot stay in AC are saved in memory temporaries.

Zero-address instructions (stack machine)

PUSH A  ; push A
PUSH B  ; push B
MUL     ; pop two, compute, push result
PUSH C  ; push C
PUSH D  ; push D
DIV     ; pop two, compute, push result
ADD     ; pop two, compute, push result
PUSH E  ; push E
PUSH F  ; push F
PUSH G  ; push G
DIV     ; pop two, compute, push result
MUL     ; pop two, compute, push result
ADD     ; pop two, compute, push result
POP Y   ; Y = top of stack

Number of instructions: 14. Only PUSH and POP carry an address; ADD, SUB, MUL, DIV work on the top two stack items, so the program follows the postfix form directly.

Summary: 3-address = 6, 2-address = 11, 1-address = 12, 0-address = 14 instructions. Fewer addresses per instruction means shorter instructions but more of them.

✓ Answer checked by Claude Opus 5.5 (high effort)

All Computer Organization and Architecture chapter 2 questions →