8086七种寻址方式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8086/8088七种寻址方式
(一)8086/8088寄存器组
(二)8086/8088寻址方式
(1)立即寻址方式
操作数就包含在指令中,它作为指令的一部分,跟在操作码后存放在代码段。这种操作数称为立即数,立即数可以是8位的也可以是16位的,如果立即数是16位的按“高高低低”的原则。
例如指令:MOV AX,1234H
的存储和执行情况如下图:
图中指令存放在代码段中,OP表示该指令的操作码部分
再例如:MOV AL,5 则指令执行行,(AL)=05H
MOV BX,3064H 则指令执行后,(BX)=3064H
(2)寄存器寻址方式
操作数在CPU内部的寄存器中,指令指定寄存器号。
对于16位操作数,寄存器可以是:
AX,BX,CX,DX,SI,DI,SP,和BP等:
对于8位数,寄存器可以是:
AL,AH,BL,BH,CL,CH,DL,DH。
这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数,因而可以取得较高的运算速度。
例如:MOV AX,BX
如指令执行前(AX)=3064H,(BX)=1234H;则指令执行后,(AX)=1234H,(BX)保持不变
例如:MOV SI,AX
MOV AL,DH
(3)直接寻址方式
操作数在寄存器中,指令直接包含有操作数的有效地址(偏移地址)。操作数一般存放在数据段
所以操作数的地址由DS加上指令中直接给出的16位偏移得到。
如果采用段超越前缀,则操作数也可含在数据段外的其他段中。
如下图所示:
在汇编语言指令中,可以用符叼地址代替数值地址。
如:MOV AX,VALUE
此时VALUE为存放操作数单元的符号地址。
如写成:MOV AX,[VALUE]
也是可以的,两者是相等的。
如VALUE在附加段中,则应指定段超越前缀如下:
MOV AX,ES:VALUE
或MOV AX,ES:[VALUE]
直接寻址方式常用于处理单个存储器变量的情况。它可实现在64K字节的段内寻找操作数。直接寻址的操作数通常是程序使用的变量。
注意立即寻址和直接寻址书写方法上的不同,直接寻址的地址要放在方括号中。在源程序中,往往用变量名表示。
(4)寄存器间接寻址方式
操作数在存储器中,操作数有效地址在SI,DI,BX,BP这四个寄存器之一中,在一般情况下,如果有效地址在SI,DI和BX中,则以DS段寄存器之内容为段值。如果有效地址在BP中,则以SS段寄存器之内容为段值。
如下图所示:
指令中也可指定段超越前缀来取得其他段中的数据如:
MOV AX,ES:[BX];引用的段寄存器是ES
MOV [SI],AX;目的操作数寄存器间接寻址
MOV [BP],CX;引用的段寄存器是BP
MOV SI,AX;目的操作数寄存器寻址方式
(5)寄存器相对寻址方式
操作数在存储器中,操作数的有效地址是一个基址寄存器(BX,BP)或变址寄存器的(SI,DI)内容加上指令中给定的8位或16位位移量之各。
即:
在一般情况下,如果SI,DI或BX之内容作为有效地址的一部分,那么引用的段寄存器是DS;如果BP之内容作为有效地址的一部分,那么引用的段寄存是百SS。
物理地址=16D*(DS)+(BX)+8
或(SI)或16位位移量
或(DI)
物理地址=16D*(SS)+(BP)+8位位移量
或16位位移量
在指令中给定的8位或16位位移量采用补码形式表示。在计算有效地址时,如位移量是8位,则被带符号扩展成16位。
例如:MOV AX,[DI+1233H]
假设,(DS)=5000H,(DI)=3678H
则物理地址=50000+3678+1223=5489BH (16位的段地址最后未位一定是0)假设该字存储单元的内容如下图,则(AX)=55AAH
下面指令中,源操作数采用寄存器相对寻址,引用的段寄存器是SS:
MOV BX,[BP-4]
下面指令中,目的操作数采用寄存器相对寻址,引用的段寄存器是ES:
MOV ES:[BX+5],AL
指令:MOV AX,[SI+3]与MOV AX,3[SI]是等价的。
(6)基址加变址寻址方式
操作数在存储器中,操作数的有效地址由:基址寄存器之一的内容与变址寄存器之一的内容相加。
(BX) (SI)
即:EA= +
(BP) (DI)
在一般情况下,如果BP之内容作为有效地址的一部分,则以SS之内容为段值,否则以DS之内容为段值.
如下图所示:
下面指令中,目的操作数采用基址加变址寻址.
引用的段寄存器是DS: MOV DS:[BP+SI],AL
下面指令中,源操作数采用基址加变址寻址.
引用的段寄器ES: MOV AX,ES:[BX+SI]
这种寻址方式适用于数组或表格处理.
用基址寄存器存放数组首地址,而用变址寄存器来定位数组中的各元素.
或反之,由于两个寄存器都可改变,所以能更加灵活地访问数组或表格中的元素. 下面的两种表示方法是等价的:
MOV AX,[BX+DI]
MOV AX,[BX][DI]
(7)相对基址加变址寻址方式
操作数在存储器中,操作数的有效地址由基址寄存器之一的内容与变址寄存器之一的内容及指令中给定的8位或16位位移量相加得到.
(BX) (SI) 8位位移量
即:EA= + +
(BP) (SI) 16位位移量
在一般情况下,如果BP之内容作为有效地址的一部分,则以SS段寄存器之内空为段值。
在指令中给定的8位或16位位移量采用补码形式表示。
在计算有效地址时,如果位移量是8位,那么被带符号扩展成16位。
当所得的有效地址超过FFFFH时,就取其64的模。
假如:MOV AX,[BX+DI-2]
假设,(DS)=5000H,(BX)=1223H,(DI)=54H,(51275)=54H,(51276)=76H 那么,存取的物理存储单元是多少呢?
物理地址=50000+1233+0054+FFFE ;
(其中FFFE是-2的32位数值,通过正2各位取反未位加1而来)
=51275H
执行该指令后,(AX)=7654H。
相对基址加变址这种寻址方式的表示方法多种多样,下面四种均是等价的。MOV AX,[BX+DI+1234H] MOV AX,123H[BX][DI]
MOV AX,1234H[BX+DI] MOV AX,1234H[DI][BX]