The four steps which the CPU
carries out for each machine language
instruction: fetch, decode, execute, and store. These steps are performed by the control unit
, and may be fixed in the logic of the CPU or may be programmed as microcode
which is itself usually fixed (in ROM
) but may be (partially) modifiable (stored in RAM
The fetch cycle places the current program counter
contents (the address of the next instruction to execute) on the address bus
and reads in the word at that location into the instruction register (IR). In RISC
CPUs instructions are usually a single word but in other architectures an instruction may be several words long, necessitating several fetches.
The decode cycle uses the contents of the IR to determine which gates
should be opened between the CPU's various functional units and busses and what operation the ALU
(s) should perform (e.g. add, bitwise and). Each gate allows data to flow from one unit to another (e.g. from register
0 to ALU input 1) or enables data from one output onto a certain bus
. In the simplest case ("horizontal encoding
") each bit of the instruction register controls a single gate or several bits may control the ALU operation. This is rarely used because it requires long instruction words (such an architecture is sometimes called a very long instruction word
architecture). Commonly, groups of bits from the IR are fed through decoders
to control higher level aspects of the CPU's operation, e.g. source and destination registers, addressing mode
operation. This is known as vertical encoding
. One way RISC
processors gain their advantage in speed is by having simple instruction decoding which can be performed quickly.
The execute cycle occurs when the decoding logic has settled and entails the passing of values between the various function units and busses and the operation of the ALU. A simple instruction will require only a single execute cycle whereas a complex instruction (e.g. subroutine call or one using memory indirect addressing
) may require three or four. Instructions in a RISC typically (but not invariably) take only a single cycle.
The store cycle is when the result of the instruction is written to its destination, either a register
or a memory location. This is really part of the execute cycle because some instructions may write to multiple destinations as part of their execution.