Home >Common Problem >What are the addressing modes of memory operands?
The addressing modes of memory operands are: direct addressing, register indirect addressing, register relative addressing, base index index addressing, and base index index relative addressing.
Addressing mode of memory operands
TIPS:
♥The object operated by the instruction is in the memory, and its expression is [ ]
♥ The instruction gives the offset address of the operation object in a certain logical segment of the memory: [offset address]
♥The segment base address of the logical segment is given by default or reset
♥The word length of the memory operand itself is not determined , whose word length depends on another register operand, or the word length is specified in other ways
1. Direct addressing
※ The instruction directly gives the offset address of the operand
eg: MOV AX,[1200H]; Store the content of the data segment 1200H in AL, 1201H The content is stored in AH
※ In direct addressing mode, the operand defaults to the data segment, but segment reset is allowed, that is, the logical segment is given by the instruction
eg: MOV AX,ES:[1200H]; Store the content of the additional segment 1200H in AL, and the content of 1201H in AH.
※Personal understanding :
Adding [ ] means that you need to find the address somewhere other than the register. At this time, you should first consider which segment of the memory, and then directly find the address given in this segment. Location. Generally speaking, the default is the data segment.
2. Register indirect addressing
※ The operand is stored in the memory, and the offset of the data in the memory is The shift address is the content of the general register in square brackets [ ].
※ Four general-purpose registers are commonly used (these four registers are also called indirect address registers, namely BX, BP, SI, and DI), which can be used to store the offset address of data. (Indirect address registers are divided into base address registers BX, BP and index registers SI, DI)
※ General format of indirect addressing:
eg: MOV BX,1200H; This is immediate addressing, that is, the operand is sent directly to BX. At this time, BX=1200H
MOV AX,[BX]; Here is [BX] =[1200H], so it is converted into direct addressing, but with the addition of BX as an intermediate agent. At this time, the content of the unit with the offset address of 1200H in the code segment is assigned to AL, and the content of the unit 1201H is assigned to AH
※Indirect addressing is to indirectly give the offset address of the operand through the register
※The segment address of the operand (which segment the operand is in) depends on Which indirect address register to choose (can be reset by segment)
※ BX, SI, and DI are in the data segment by default; BP is in the stack segment by default
※ Personal understanding:
We can find the corresponding segment through the selected indirect address register, and then find the physical location through the offset of the segment. When addressing indirectly, we can find the physical location of the source operand.
Physical location=segment base address*16 offset address.
3. Register relative addressing
※ The offset address of the operand is the content of the register plus one Displacement amount
※eg: MOV AX,2000H ; Immediate addressing, assign 2000H to AX
MOV DS,AX ; DS is obtained from AX Segment head address
MOV BX,1200H; Immediate addressing, assign 1200H to BX
MOV AL,[BX]5; Relative addressing, the segment base address is 2000H, offset The content of the shift amount of 1200H 5 is assigned to AL
※ Relative addressing is mainly used for one-dimensional array operations
※ The displacement is often used as a table The header address and the value of the indirect address register are used as the relative address in the table (there will be constants between uses, which will be inconvenient)
※ Personal understanding:
Relative addressing adds a displacement constant on the basis of indirect addressing. Therefore, the way to determine whether it is indirect addressing or relative addressing is: see if there are constants before and after the indirect address register. If there are constants, it is relative addressing
4. Base address indexed addressing
※ The offset address of the operand is :
The contents of a base address register (BX, BP) and the contents of an index register (SI, DI)
※ BX defaults to the data segment and BP defaults to the stack segment
※ The segment address of the operand is determined by the selected base address register
※ Same as relative addressing, mainly used for one-dimensional array operations
※eg: MOV SI,1100H; Immediate addressing, assign 1100H to SI
MOV BX,SI; Assign 1100H to BX
MOV AX,[SI BX] ;The physical address of the source operand = data segment base address*16 1100H 1100H
※ Personal understanding:
Base address indexed addressing is to first find the first address of the segment where the base register is located, and then add the offset of the base register and the offset of the index register. Its characteristics are that [BX][BP] must be one of the two, [SI][DI] must be one of the two
5. Base address Indexed relative addressing
※ The offset address of the operand is :
Base address register Index register displacement amount
※ The segment address of the operand is determined by the selected base address register
※The base address index relative addressing mode is mainly used for the operation of two-dimensional arrays
※eg: MOV DI,1100H ; Immediate addressing, assign 1100H to DI
MOV BP,DI ; Assign 1100H to BP
MOV AL,[BP][DI]5; BP indicates that the operand is in the stack segment, and its physical address = stack segment segment base address*16 1100H 1100H 5
※Personal understanding:
Base index relative addressing only adds a constant offset to the base index, and the physical address of the source operand can be grasped from this.
For more related knowledge, please visit: PHP Chinese website!
The above is the detailed content of What are the addressing modes of memory operands?. For more information, please follow other related articles on the PHP Chinese website!