The Intel 4004 was a 4-bit microprocessor, and the first processor created by Intel. For the following questions, refer to the Intel MCS-4 Assembly Language Programming Manual.

### Logic Operations

The 4004 does not have any bitwise operators in its instruction set. Section 4.4 of the manual gives programs to compute 4-bit AND, OR, and XOR using the addition operation.

#### Adding logic operators

Our text gives includes a table of instruction frequencies for MIPS (Figure 2.32 in the 3rd edition, B.27 in the 4th, and A.27 in the 5th). According to this table, for the MIPS instruction set running the SPECint2000 benchmark, AND makes 4% of the instructions, OR makes 9%, and XOR makes 3%. Of course, these numbers would be different for the 4004, since other operations that take one instruction in MIPS will take more than one on the 4004, but assuming these percentages would roughly hold, what would the expected number of instructions be if you introduced new logical operation instructions to the 4004 instruction set?

#### Encoding

Propose an encoding for these new instructions within the unused opcodes.

### Arithmetic Operations

The `SUB`

instruction performs `A = A + ~R + ~C`

for accumulator A, Register R, and carry bit C; and the `SBM`

instruction performs `A = A + ~M + ~C`

for M in memory.

A 2's complement negation is `-R = ~R + 1`

, so these instructions performs a 2's complement subtract if C is initialized to 0. As seen in section 4.6 of the 4004 manual, you can chain these instructions for subtracts of larger than four bits, but need to complement the carry between each 4 bits of a multi-digit subtract.

#### Non-inverted Carry

If the subtract instructions instead performed `A = A + ~R + C`

(without inverting the carry), you would need to set the carry to 1 before a single four-bit subtract or the first of a sequence, but would not need to do anything to the carry between digits of a multi-digit subtract. Rewrite the code on page 4-17 for this new version of the subtract

#### Local speedup

What is the expected speedup of just this subtract code, as a function of the number of loop iterations?

#### Overall speedup

Assuming 32-bit subtract operations are 5% of the total run time of a program, what is the overall speedup?

### ISA vs. Organization

Most of the points presented in Chapter 2 of the manual (Computer Organization) are actually part of the ISA, and not the organization. List the points mentioned that **are** details of the organization.