Sei sulla pagina 1di 51

Addressing Modes

Data Addressing Modes

Fig.3.1 illustrates the MOV instruction and defines the direction of data flow Fig.3.2 shows all possible data variations of the data-addressing modes using the MOV instruction
Register adressing: MOV CX,DX or MOV ECX,EDX Immediate addressing: MOV AL,22H or MOV EAX,12345678H Direct addressing: MOV CX,LIST

Data Addressing Modes

Base-plus-index addressing:



Register relative addressing:


Base relative-plus-index addressing:


Scaled-index addressing:

Register Addressing
It is the most common form and is the easiest to apply Microprocessor contains 8-bit, 16-bit, 32-bit registers
Never mix an 8-bit register with a 16-bit register, 16-bit register with a 32-bit register, etc., because this results in an error when assembled

Table 3.1 shows many variations of register move instructions Fig.3.3 shows the operation of the MOV BC,CX instruction

Register Addressing
Example 3.1 shows a sequence of assembled instructions that copy various data between 8-, 16-, and 32-bit registers

Immediate Addressing
The term immediate implies that the data immediately follow the hexadecimal opcode in the memory
Immediate are constant data The MOV immediate instruction transfers a copy of the immediate data into a register or a memory location

Fig.3.4 shows the source data (sometimes preceded by #) overwrite the destination data
The instruction copies the 13456H into register AX

Register Addressing
Example 3.2 shows various immeidate instructions in a short program that placess a 0000H into the 16-bit registers AX, BX, CX

Direct Data Addressing

There two basic forms of direct data addressing:
direct addressing, which applies to a MOV between a memory location and AL, AX or EAX displacement addressing, which applies to almost any instruction in the instruction set

Direct Addressing: MOV AL,DATA (Fig.3.5)

Table 3.3 lists the three direct addressed instruction A MOV instruction is 3-byte long instruction

Direct Data Addressing

Displacement Addressing: MOV CL,DATA
almost identical with direct addressing except that the instruction is four bytes wide

Register Indirect Addressing

It allows data to be addressed at any memory location through an offset address held in any of the following register: BP, BX, DI, and SI
MOV AX,[BX] Fig.3.6

Data segment is used by default with register indirect addressing or any other addressing mode that uses BX, DI, or SI to address memory
If register BP addresses memory, the stack segment is used by default

Register Indirect Addressing

Sometimes, indirect addressing requires specifying the size of the data with the special assembler directive BYTE PTR, WORD PTR or DWORD PTR
These indicate the size of the memory data addressed by the memory pointer (PTR)

Indirect addressing allows a program to refer to a tabular data located in the memory system (Fig.3.7 & Example 3.6)

Base-Plus-Index Addressing
It indirectly addresses memory data
In 8086 - 80286, this use a base register (BP or BX, holds the beginning location of a memory array) and an index register (DI or SI, ) to indirectly addresses memory In 80386 and above, this type of addressing allows the combination of any two 32-bit extended registers except #SP

Figure 3.8 shows the sample instruction of locating data with this scheme

Base-Plus-Index Addressing (contd)

The major use of this type of addressing is to address elements in a memory array
Fig.3.9 shows the use of BX (base) and DI (index) to access an element in an array of data) Study Table 3.6 and Example 3.7 as well

Register Relative Addressing

In its, the data in a segment of memory are addressed by adding the displacement to the contents of a base ro and index register (BP, BX, DI, or SI)
Fig.3.10 shows the operation of the MOV AX,[BX+ 1000H] instruction

The displacement can be a number added to the register within the [ ], as in MOV AL,[DI+2], or it can be a displacement substracted from the register, as in MOV AL,[SI-1]

Register Relative Addressing (contd)

It is possible to address array data with register relative addressing such as one does with base-plus-index addressing
See Fig.3.11 and study the example 3.8

Base Relative-Plus-Index Addressing

This mode often addresses a two-dimensional array of memory data
It is the least-used addressing mode (i.e., too complex for frequent use in a program) Fig.3.12 shows how the instruction MOV AX,

Addressing arrays with base relative-plusindex addressing

the displacement addresses the file the base register addresses a record the index register addresses an element of a record

Study Example 3.9 and Fig.3.13

Scaled-Index Addressing
This type of addressing is unique to the 80386 - Pentium Pro
It uses two 32-bit registers (a base register and an index register) to access the memory The second register (index) is multiplied by a scaling factor (either 1X, 2X, 4X, or 8X) MOV AX,[EDI+2*ECX] See Example 3.10 and Table 3.9

Data Structures
A data structure is used to specify how information is stored in a memory array; it can be quite useful with application that use arrays
The start of a structure is identified with the STRUC directive and ended with the ENDS See Example 3.11

When data are addressed in a structure, use the structure name and the field name to select a field from the structure (Example 3.12)

Program Memory Addressing

Program memory-addressing modes (JMP and CALL) consist of three distinct forms: direct, relative, and indirect Direct Program Memory Addressing
The instruction store the address with the opcode

Program Memory-Addressing Modes

Program memory-addressing modes (JMP and CALL) consist of three distinct forms: direct, relative, and indirect Direct Program Memory Addressing
The instructions store the address with the opcode See Fig.3.14 It is called a far jump because it can jump to any memory location for the next instruction

Program Memory Addressing Modes (contd)

Relative Program Memory Addressing

The term relative means relative to the IP See Fig.3.15 JMP instruction is a one-byte instruction with a one-byte or two-byte displacement that adds to the instruction pointer Relative JMP and CALL instructions contain either an 8-bit or a 16-bit signed displacement that allows a forward memory reference or a reverse memory reference

Program Memory Addressing Modes (contd)

Indirect Program Memory Addressing

Table 3.10 lists some acceptable indirect program jump instructions, which can use any 16-bit register, any relative register, and any relative register with a displacement If a 16-bit register holds the address of a JMP instruction, the jump is near If a relative register holds the address, the jump is also considered an indirect jump Fig.3.16 shows a jump table that is stored beginning at memory location TABLE

Stack Memory-Addressing Modes

Stack holds data temporarily and stores return addresses for procedures
The stack memory is LIFO memory Use PUSH instruction to place data onto stack Use POP instruction to remove data from stack

The stack memory is maintained by two registers: SP or ESP, and SS

Study Fig.3.17 The PUSHA and POPA either push or pop all of the register, except the segment register, on the