Decoding and executing an instruction
In this section, we’ll look at a few examples of how instructions are encoded and decoded. Consider the ADD r1,r2,r3
, operation (where the codes for registers rD
, rS1
, and rS2
are shaded), which is defined in RTL as follows:
[r1]
←
[r2] + [
r3]
Table 4.2 shows that the encoding of ADD r1,r2,r3
is 10 00000 001 010 011 0000000000000000
. The corresponding 4-bit format code that defines the registers to be used is 1110
because we use three registers and no literal field (remember that this 4-bit format code is not part of the opcode but is used by the assembler to interpret the instruction).
The following Python code shows how we can decode an instruction to extract five variables: the operation code (binOp
); the three registers, rD
, rS1
, and rS2
; and a literal. Decoding is performed by shifting the bits of the instruction right to move the required field into the least significant position and then ANDing it with a mask to remove...