Addressing modes are the ways how architectures specify the address of an object they want to access. In GPR
machines, an addressing mode can specify a constant, a register or a location in memory.
The most common names for addressing modes (names may differ among architectures)
R4 <- R4 + R3
When a value is in a register
Add R4, #3
R4 <- R4 + 3
Add R4, 100(R1) R4 <- R4 + M[100+R1] Accessing local variables
Register deffered Add R4,(R1)
R4 <- R4 + M[R1]
Accessing using a pointer or a computed address
Add R3, (R1 +
R3 <- R3 + M[R1+R2]
R2 - index amount
Add R1, (1001) R1 <- R1 + M
Useful in accessing static data
Memory deferred Add R1, @(R3) R1 <- R1 + M[M[R3]]
If R3 is the address of a pointerp, then mode yields*p
Add R1, (R2)+
R1 <- R1 +M[R2]
R2 <- R2 +d
Useful for stepping through arrays in a loop.
d - size of an element
R1 <- R1 + M[R2]
Both can also be used to implement a stack as push and
Add R1, 100(R2)
Used to index arrays. May be applied to any base
addressing mode in some machines.
M[R1] refers to contents of memory location whose address is given by the contents of R1
Immediateand displacement addressing modes dominate addressing mode usage. The major question for
displacement-style addressing mode is that of the range of displacement used. Choosing the displacement field size is
important because it directly affects instruction length. According to measurements taken on the data access on a GPR
architecture using SPEC benchmarks displacement values are widely distributed.
Another important instruction set measurement is the range of values for immediates . Small immediate values are
used most heavily. However, large immediates are sometimes used, most likely in address calculations.
Encoding of Addressing Modes
How the addressing modes of operands are encoded depends on