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]
|