Note: This is the June 17, 2006 capture of http://bentong.topcities.com/comp/progs/asm/addrmode.htm from the Wayback Machine. This was uploaded to the reloaded ISLESV.NET on June 22, 2023.
Register Addressing: one of the operand to be accessed is residing in one of the internal register of the 8088. This is the fastest addressing since the processor does not need to access any external memory.
Immediate Addressing: the source operands is a constant defined in the source code.
Direct Addressing: one of the operands is an offset to a memory location. This offset, called Effective (memory) Address (EA), is combined with the contents of the DS register to produce the physical location of the needed operand. One of the operands contain the address whose content is to be used as value for the operation. This is the concept of pointers in C. In assembly, this is achieved by specifying a label as one of the operands.
Register Indirect Addressing: one of the operands is an offset to a memory location, but the operand itself is not a memory location but a base or an index register within the 8088. The operand is indicated by square braces around the register name. Ex.: [SI], [DI], [BP], [BX].
Based Addressing: the physical address of the operand is obtained by adding a displacement to the contents of either BX or BP and DS or SS, respectively. The displacement may be direct or indirect. Only the base register or the base pointer register are to be specified: if it is BX, the actual is offset is BX+displacement+DS; if it is BP, the actual offset is BP+displacement+SS. Ex.: MOV [BX]+SOME_LABEL,AL Indexed Addressing: This is based addressing with BX or BP replaced with the index registers (SI,DI). Based Indexed Addressing: The offset is BX|BP + DI|SI + displacement + DS
String Addressing
The string instructions of the 8088’s instruction set automatically use the source and destination index registers to specify the effective address of the source and destination operands, respectively. In the instruction
MOVS
neither SI nor DI appears in the description of the string instruction, but both are used during its execution.
Port Addressing
Port addressing is used in the conjunction with the 8088’s IN and OUT instructions to access input and output ports. For ports in the I/O address space, only the direct addressing mode and an indirect addressing mode using DX are available. For example, direct addressing of an input port is used in the instruction
IN AL,15H
This stands for “input the data from the byte-wide input port at address 15H of the I/O address space to register AL.”
Indirect Port Addressing: The port number is loaded in DX first:
MOV AX,15H
MOV DX,AX
IN AL,DX
Quiz
Identify the addressing modes used for the source and destination operands in the instructions that follow:
(a) MOV AL,BL ; Source: Register, Dest: Register
(b) MOV AX,0FFH ; Source: Immediate, Dest: Register
(c) MOV [DI],AX ; Source: Register, Dest: Register Indirect