Skip to main content

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

Short answer

For Y = A*(B+D/C)+(G*E)/F, the counts are 6 three-address, 11 two-address, 10 one-address and 14 zero-address instructions. The postfix form A B D C / + * G E * F / + is used.

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

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.

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

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

DIV R1, D, C   ; R1 = D / C
ADD R2, B, R1  ; R2 = B + R1
MUL R3, A, R2  ; R3 = A * R2
MUL R4, G, E   ; R4 = G * E
DIV R5, R4, F  ; R5 = R4 / F
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
MOV R2, B   ; R2 = B
MOV R3, D   ; R3 = D
DIV R3, C   ; R3 = R3 / C
ADD R2, R3  ; R2 = R2 + R3
MUL R1, R2  ; R1 = R1 * R2
MOV R2, G   ; R2 = G
MUL R2, E   ; R2 = R2 * E
DIV R2, F   ; R2 = R2 / F
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 D    ; AC = D
DIV C     ; AC = AC / C
ADD B     ; AC = AC + B
MUL A     ; AC = AC * A
STORE T1  ; T1 = AC
LOAD G    ; AC = G
MUL E     ; AC = AC * E
DIV F     ; AC = AC / F
ADD T1    ; AC = AC + T1
STORE Y   ; Y = AC

Number of instructions: 10. 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
PUSH D  ; push D
PUSH C  ; push C
DIV     ; pop two, compute, push result
ADD     ; pop two, compute, push result
MUL     ; pop two, compute, push result
PUSH G  ; push G
PUSH E  ; push E
MUL     ; pop two, compute, push result
PUSH F  ; push F
DIV     ; 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 = 10, 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 →