在8086指令系统中,说明操作数所在地址的寻址方式可分为3大种(7小种)
程序运行时用到的数据决大部分存放在内存中,如何寻找内存中的数据就是存储器寻址方式。
操作数在存储器中,操作数的有效地址EA在指令中,段地址在默认的或段超越前缀指定的段寄存器中
1.立即寻址
操作数包含在指令中,紧跟着操作码并与操作码一起存放在代码段中,与代码一起被取入CPU的指令队列,指令执行时不需要再访问存贮器。
立即寻址中的操作数可以是计算机有效数制下的数值,也可以是带单引号的字符。
例如: MOV AX,3102H ;
MOV AL,‘A’ ;
2.寄存器寻址
操作数放在某个寄存器中,注意 源操作数与目的操作数字长要相同(匹配) ,例如:
MOV AX, BX ;
MOV [3F00H], AX;
MOV CL, AL;
错误示例: MOV AX, BL ; 字长不同
3.直接寻址
在指令中直接给出操作数所在单元的位移地址,具体有两种形式。
(1) MOV AX,[2050H] ;AX←[DS×16+2050H]
位移地址通常以变量的形式出现,在指令中就直接写变量的名字
(2) MOV SI , BUF ; BUF为一变量
默认的段寄存器为DS,但也可以显式地指定其他段寄存器。称为“段超越”前缀。
例如:
MOV DX,ES:[2050H];使用段超越;DX←[ES×16+2050H]
解题示例:
4.寄存器间接寻址
操作数的位移地址放在寄存器中,只有SI、DI、BX和BP可作间址寄存器。
解题示例:
5.寄存器相对寻址
EA=间址寄存器的内容加上一个8/16位的位移量。
寄存器相对寻址方式操作数的书写形式可以采用多种,以下是与MOV AX,BUF[BX] 指令等价的另外几种书写形式:
MOV AX,[BX+ BUF]
MOV AX,[BUF + BX]
MOV AX,[ BX] BUF
解题示例:
6.基址+变址寻址
由一个基址寄存器的内容和一个变址寄存器的内容相加而形成操作数的位移地址。
寄存器 BX 和 BP 为基址寄存器, SI 和 DI 为变址寄存器。这种寻址方式中, 一个基址寄存器加一个变址寄存器构成操作数,操作数的形式只有 4 种:
[BX][SI] ; [BX][DI] ; [BP][SI]; [BP][DI]
这种寻址方式里段基址是 DS 还是 SS 呢?8086 汇编规定以基地址为主,如果基址寄存 器为 BP,则操作数的段基址默认由 SS 提供;若 BX 为基址寄存器,则段基址默认由 DS 提 供。
解题示例:
7.基址+变址相对寻址
在基址+变址寻址的基础上再增加一个8位或16位位移量,三者之和为位移地址
与基址变址寻址方式相同,基址变址相对寻址方式的操作数也可采用多种等价形式,例:
MOV DX ,disp [ BX ][ SI ]
MOV DX ,disp [ BX + SI ]
MOV DX,[ BX + SI + disp ]
MOV DX,[ BX + SI ]disp
解题示例: