Arithmetic in a Microprogram


This tutorial is intended to follow the tutorial on accessing memory in a microprogram.

The purpose of this tutorial is to illustrate how simple addition can be performed in a microprogram. The example program adds the values stored in registers 0 (MDR) and 1 (PC) and stores the result in register 4 (SP).

 1. Go to the microprogram editor window.

 2. Clear the control store.

Microinstruction at 0x000

To perform any binary operation (AND, OR, or ADD), one operand must first be copied to the H register which drives the A-bus side of the ALU.

 3. Set the "Next Addr" field to 000000001.

 4. Set up the ALU, B-bus, and C-bus fields to load the value in register 0 into register H. You should know how to do this from the tutorial on accessing registers.

Here is the microinstruction at 0x000:

Microinstruction at 0x001

In performing register transfers you performed an add operation with the ENA (enable A) bit set to 0: ALU = 0 + B-bus. This time, you want to set the ENA bit so that the value in the H register is gated to the A-bus: ALU = H + B-bus.

 5. Set the "Next Addr" field to 000000010.

 6. Set up the ALU, B-bus, and C-bus fields to add the values stored in H and register 1 (PC) and store the result in register 4 (SP).

Here is the microinstruction at 0x001

Microinstruction at 0x002

 7. Write the micro "halt" instruction.

Here is the complete program:

If you want, you can save your microprogram (Control menu, Save Control Store option).

Running the Microprogram

 8. Go to the computer simulator window.

 9. Reset the computer.

 10. Enter a value of 00001111 into MDR and a value of 11110000 into PC:

 11. Click Micro Step. Confirm that the value in MDR was copied to register H.

 12. Click Micro Step. Confirm that the values in PC and H were added together (yielding a sum of 11111111) and stored in SP.

 13. Click Micro Step. The microprogram should terminate.

The next tutorial covers branching in a microprogram.