Addressing Modes
1. Immediate (literal)
operand part of instruction
limited operand magnitude
useful for storing small constants
no address calculation; no memory reference
<ea> = none
e.g. ADD #3,D1 instruction
MOV AX,0FFH
MOVLW 3
Addressing Modes
2. Direct (absolute)
address of operand part of the instruction
limited address space, may have extension words
no address calculation
<ea> = A
e.g. ADD.B 3,D1 instruction
MOV AX,NUM1
MOVWF NUM1
memory
Addressing Modes
3. Indirect (memory deferred)
address of operand is in the memory location
whose address appears in the instruction
address retrieved from memory
<ea> = (A)
instruction
e.g. ADD (PTR),R1
memory
Addressing Modes
3. Indirect (memory deferred)
address space of 2**N if word length is N;
however, number of effective addresses is limited
to 2**K where K is the length of the address field
in the machine code
some machines allow multilevel or cascaded
indirect addressing
<ea> = (...(A)...)
e.g. Data General NOVA ... the first bit of the
operand is an indirect bit where 0 means the
operand is data and a 1 means the operand is an
address
Addressing Modes
4. Register Direct
operand is in a register whose number appears in
the instruction; small address field in instruction
address space is very limited (i.e. # of registers)
no address calculation; no memory reference
<ea> = R
e.g. ADD D0,D1 instruction
MOV AX,0FFH
MOVWF NUM1
registers
Addressing Modes
5. Register Indirect (deferred)
address of operand is in a register whose number
appears in the instruction
large address space
<ea> = (R)
instruction
e.g. ADD (A0),D1
LFSR 0,LIST
MOVF INDF0,W
memory
registers
Addressing Modes
5. Register Indirect - Autoincrement/Autodecrement
register indirect addressing where the address in the
register is automatically incremented/decremented either
before or after effective address calculations
for postincrement/postdecrement
<ea> = (R) instruction
(R) <-- (R) ± 1
e.g. ADD.L (A1)+,A2
memory
registers
Addressing Modes
5. Register Indirect - Autoincrement/Autodecrement
for preincrement/predecrement
(R) <-- (R) ± 1
instruction
<ea> = (R)
e.g. ADD.W -(A1),D2
memory
registers
Addressing Modes
6. Stack
a) address of operand is in the stack pointer
- variation of register indirect addressing
<ea> = (SP)
b) addressing is implied by the instruction for
assembly languages with explicit stack instructions
c) for hardware stacks, the <ea> is an address in
the stack; the limited size of this stack has
implications for the size and operation of the
pointing mechanism
Addressing Modes
7. Displacement
address of operand is the sum of a register and a
displacement
variations are named with respect to the register
the basic format is
instruction
<ea> = disp + (R)
e.g. ADD.W 10(A0),D3
ADD.W (10,A0),D3
ADD.L 8(A0,D0),D3
memory
registers
Addressing Modes
7. Displacement
(a) Indexing
the address field references a memory address, and R is
an index register containing the displacement from that
address
<ea> = A + (R)
(b) Autoindexing
automatically increment/decrement the index register
before/after a data access
<ea> = A + (R)
(R) <-- (R) + 1
the increment/decrement may be 1 or a restricted set of
values
Addressing Modes
7. Displacement
(c) Postindexing/Preindexing (typically only one)
combination of indirect addressing and indexing
if indexing is performed after the indirection, it is termed
postindexing
<ea> = (A) + (R)
useful for accessing one of a number of blocks of data all
with the same fixed format
if indexing is performed before the indirection, it is
termed preindexing
<ea> = (A + (R))
useful for constructing a jump table where the table of
addresses starts at location A and R indexes into the
table
Addressing Modes
7. Displacement
(d) Relative
the register, R, is the program counter, PC
the operand is located a certain distance from the
current position of the program counter
<ea> = (PC) + A
used most often in branch instructions
instruction execution done after the PC has been
incremented to point to the next instruction. Therefore,
relative to the next instruction.
Addressing Modes
7. Displacement
(e) Base-Register
the referenced register contains a memory address and the
address field contains a displacement (opposite to indexing)
in the simplest case, the base register is explicitly
referenced in the instruction and is local to the instruction
<ea> = (R) + A
if the register is a base or segment register implied by the
instruction (i.e. not explicitly specified), the primary use is
implementing segmentation and/or memory protection. The
program is written as if starting at location 0. The addition
of the base register to all memory references is equivalent
to loading the program relative to a base address. A base
register is usually equal to the physical address length. A
segment register is usually shorter than the physical
address length.
Addressing Modes
7. Displacement
(f) Base-Indexed
The base register is local to the instruction and is
combined with an index register and a displacement
<ea> = (B) + (I) + A
e.g ADD.L 8(A0,D0),D3
ADD.L (8,A0,D0),D3
e.g. for Pentium, possible to do
SEGMENT + BASE + (INDEX * SCALE) + DISPLACEMENT
can be effectively used to index through complex data
structures