寻址方式总结
1 立即寻址
操作数为立即数。
- 常用于给寄存器或内存单元赋初值
- 只能用于源操作数,不能用于目的操作数
例:
MOV AL, 34H
MOV AX, 1234H
2 寄存器寻址
操作数存放在CPU内部的寄存器中。
例:
MOV CX, AX
3 直接寻址
操作数地址的16位偏移量直接在指令中给出(存放于代码区),而操作数存放在数据区。(操作数的地址为DS左移四位加上该16位偏移量)
例:
MOV AX, [1200H]
4 寄存器间接寻址
操作数在存储器中,操作数地址的16位偏移量在寄存器中(SI、DI、BX、BP)。
- 若以SI、DI、BX间接寻址,操作数在数据段中,操作数地址为DS左移四位加上SI、DI、BX其中之一的内容。
例:
MOV AX, [SI]
MOV AX, [BX]
- 若以BP间接寻址,则操作数在堆栈段区域内,操作数地址为SS左移四位加上BP的内容。
例:
MOV AX, [BP]
- 段超越:SI、DI、BX中储存的偏移量可以与其他段寄存器储存的段基址组合成操作数的地址。
例:
MOV AX, ES:[SI]
或ES:MOV AX, [SI]
5 变址寻址
以SI、DI寄存器的内容,加上指令中给定的8位或16位偏移量作为操作数的地址。(必须要有一个段寄存器作为基地址,如:DS)
- 允许段超越
例:
MOV AX, [DI+60]
或MOV AX, 60[DI]
MOV BX, [SI+1000H]
或MOV BX, 1000H[SI]
6 基址加变址寻址
把BX和BP看做基址寄存器,把SI和DI看做变址寄存器,将这两种寻址方式结合起来形成一种新的寻址方式。
把一个基址寄存器(BX或BP)的内容加上一个变址寄存器(SI或DI)的内容,再加上指令中给出的8位或16位的偏移量,从而形成操作数的偏移地址。
默认BX以DS为基地址,BP以SS为基地址。(允许段超越)
例:
MOV AX, [BX+SI+1030H]
或MOV AX, 1030H[BX+SI]
或MOV AX, 1030H[BX][SI]
7 注意
内存操作数地址只能由BX、BP、SI、DI给出,它们的组合也不是任意的。
- 寄存器间接寻址
[SI]
、[DI]
、[BX]
、[BP]
。 - 变址寻址
[SI+X]
、[DI+X]
、[BX+X]
、[BP+X]
。 - 基址加变址寻址
[BX+SI+X]
、[BX+DI+X]
、[BP+SI+X]
、[BP+DI+X]
。
This post is licensed under CC BY 4.0 by the author.