Q. What is Indirect Addressing Mode explain?
Indirect Addressing Mode
In the indirect addressing modes operands employ registers to point to locations in memory. So it is essentially a register indirect addressing mode. This is a convenient mode for handling arrays / strings etc. For this mode two kinds of registers are used. These are:
- Base register BX, BP
- Index register SI, DI
BX comprises offset/ pointer in Data Segment
BP comprises offset/ pointer in Stack segment.
SI comprises offset/pointer in Data segment.
DI comprises offset /pointer in extra data segment.
There are 5 different kinds of indirect addressing modes:
1. Register indirect
2. Based indirect
3. Indexed indirect
4. Based indexed
5. Based indexed with displacement.
Mode
|
Description
|
Example
|
Register Indirect
|
Indirect operands are particularly powerful when processing list of arrays, since a base or an indexregister can be modified at runtime.
|
MOV BX, OFFSET ARRAY
; point to start of array
MOV AL,[BX]
; get first element
INC BX
; point to next
MOV DL,[BX]
; get second element
The brackets around BX signify
That we are referring to the contents of memory location, using the address stored in BX.
In the subsequent illustration, three bytes in an array are added together:
MOV SI,OFFSET ARRAY
; address of first byte
MOV AL,[SI]
; move the first byte to AL
INC SI
; point to next byte
ADD AL,[SI]
; add second byte
INC SI
; point to the third byte
ADD AL,[SI]
; add the third byte
|
Based Indirectand Indexed
Indirect
|
Based and indirect addressing modes are employed in the same way. The contents of a register are added to a displacement to produce an effective address. The register should be one of the following: SI, DI, BX or BP. If the registers used for displacement are base registers, BX or BP, it is said to be base addressing or else it is termed as indexed addressing. A displacement is either a number or a label whose offset is known at assembly time. The notation can take various equivalent forms. If BX, SI or DI is used, the effective address is generally an offset from the DS register; BP on the other hand generally comprises an offset from SS register.
|
; Register added to an offset
MOV DX, ARRAY[BX]
MOV DX,[DI + ARRAY]
MOV DX,[ARRAY + SI]
; Register added to a constant
MOV AX,[BP + 2]
MOV DL,[DI - 2] ; DI + (-2)
MOV DX,2[SI]
|
Based Indexed
|
In this kind of addressing the operand's effective address is formed by combining a base register with an index register.
|
MOV AL,[BP] [SI]
MOV DX,[BX + SI]
ADD CX,[DI] [BX]
; Two base registers or two
; index registers cannot be
; combined, so the
; following would be
; incorrect:
MOV DL,[BP + BX]
; error : two base registers
MOV AX,[SI + DI]
; error : two index registers
|
Based Indexed with Displacement
|
The operand's effective address is formed by combining a base register, an
Index register, and a displacement.
|
MOV DX,ARRAY[BX][SI]
MOV AX, [BX + SI +
ARRAY]
ADD DL,[BX + SI + 3]
SUB CX, ARRAY[BP +
SI]
Two base registers or two
index registers can't be
combined so the
following will be
incorrect:
MOV AX,[BP + BX + 2]
MOV DX,ARRAY[SI +
DI]
|