result in the accumulator Direct address: ADD.A address 1 — add the value stored at address 1 Memory indirect: ADD.M address 1 — read the value in address 1, use that value as another address and add that value Many ISAs also have registers that can be used for addressing as well as math tasks. This can be used in a one-address format if a single address register is used. In this case, a number of new modes become available: Register direct: ADD.R register 1 — add the value stored in the address held in register one Displacement: ADD.D constant 1 — add the constant to the address register, then add the value found in memory at that resulting location Index: ADD.I register 1 — add the value in register 1 to the address register to make a new address and then adds the value at that location to the accumulator Autoindex: ADD.AI register 1 — as in the Index case, but automatically increments the address Orthogonality Orthogonality is the principle that every instruction should be able to use any supported addressing mode. In this example, if the direct addressing version of ADD is available, all the others should be as well. The reason for this design is not aesthetic, the goal is to reduce the total size of a program's object code. By providing a variety of addressing modes, the ISA allows the programmer to choose the one that precisely matches the need of their program at that point, and thereby reduce the need to use multiple instructions to achieve the same end. This means the total number of instructions is reduced, both saving memory and improving performance. Orthogonality was often described as being highly "bit efficient". Keeping the addressing mode specifier bits separate from the opcode operation bits produces an orthogonal instruction set. As the ultimate end of orthogonal design is simply to allow any instruction to use any type of address, implementing orthogonality is often simply a case of adding more wiring between the parts of the processor. However, it also adds to the complexity of the instruction decoder, the circuitry that reads an instruction from memory at the location pointed to by the program counter and then decides how to process it. In the example ISA outlined above, the ADD.C instruction using direct encoding already has the data it needs to run the instruction and no