A small computer has two registers, R1 and R2, and the following instructions: LOAD, SUBTRACT, MULTIPLY, BNZ, PRINT and STOP. The format of the instructions is the following:
Operation Code First Operand Second Operand
The LOAD instruction loads data from memory to a register. The LOAD, SUBTRACT, and MULTIPLY instructions expect a register in the first operand. They expect a data location or a direct value in the second operand. The data location in the second operand can be a Register or a Memory Address. A direct value (denoted by =) is the actual data value (as opposed to the data location). The LOAD, SUBTRACT, and MULTIPLY use the second operand to operate on the data in the first operand. They leave the result in the first operand.
For example, if the value stored in register R1 is 10 and the instruction MULTIPLY R1, = 4 were executed, the new value stored in register R1 will be 40.
As another example, assume the value stored in register R1 is 10 and the value stored in data location 500 is 35. If instruction MULTIPLY R1, 500 were executed, the new value stored in register R1 will be 350.
BNZ tests the first operand and branches to the address specified in the second operand.
PRINT has one operand. It prints the content of the first operand on the screen.
STOP does not have any operand. It halts the program.
0 LOAD R1, = 5
1 LOAD R2, = 1
2 MULTIPLY R2, R1
3 SUBTRACT R1, = 1
4 BNZ R1, 2
5 PRINT R2
What does the program compute and what is the printed result?