; sub.asm ; subtract two 4bit numbers on the Intel 4004 FIM R0R1, 0x35 ; initialize R0=5 & R1=3 FIM R2R3, 0 ; clear R2R3 (unused) LD R0 ; load R0 into accumulator SUB R1 ; subtract second number XCH R1 ; and store in R1 done: JUN done ; end
Yet another short program fragment, showing a single 4-bit binary subtraction.
The program first executes an FIM load immediate instruction to initialize the source registers (here, R0=5 and R1=3). We also initialize the register pair R2R3 (R2=0 and R3=0), allthough these are not used at all by this program (they will be used in the next program, showing the BCD subtraction). The program then loads R0 into the accumulator, subtracts the contents of R1 from the accumulator, and stores the result into R1. Finally, the program enters an endless loop, written as a JUN (jump unconditional) instruction that jumps to its own address.
To watch the program execution, open the user-interface of the i4004 processor and the i4001 ROM chip memory editor. (On Windows, you may have to resize and move the windows a little, so that all windows remain readable during the simulation.)
Yet again, you may want to single-step through the program
with the technique explained in the MCS4 overview,
because the program is so short.
Type the value
1.35 into the time-interval textfield
in the simulator control panel,
and select the
us (microseconds) value from
the time-scale drop-down list.
Reset the simulation by clicking the rewind button.
Now, click the
run-for button to run and automatically
pause the simulation after the selected time interval
(here 1.35 microseconds or one MCS4 clock cycle) has elapsed.
Repeatedly click the run-for button to step through the program.
Run the applet | Run the editor (via Webstart)