这种方式下,操作数的有效地址EA不像直接寻址那样直接放在指令中,而是通过基址寄存器BX,BP或变址寄存器SI、DI中的任一个寄存器的内容间接得到的,即称这四个寄存器为间址寄存器。由四个间址寄存器确定的操作数可在两种段中:
EA = (BX)
(BP)
(SI)
(DI)
(1)指令中指定BX、SI、DI为间址寄存器,则操作数在数据段中。这种情况下,用DS寄存器内容作段首址,操作数的实际地址为:
PA=16×(DS)+ (BX)
(SI)
(DI)
例如: MOV AX,[SI]
若已知(DS)=2000,(SI)=1000H,则PA=21000H,该指令将把数据段中21000H单元和21001 H相邻两个单元的内容传送到AX。
图3-2 寄存器间接寻址示意图
(2)指令中若指定BP为间址寄存器,则操作数在堆栈段中。这种情况下,用SS寄存器内容作段首址,操作数的实际地址为:
PA=16×(SI)+(BP)
使用寄存器间接寻址方式时应注意:
(1)在指令中,也可指定段超越前缀来取得其它段中的操作数。如:
MOV AX, ES:[BX]
(2)寄存器间接寻址方式可以用来对一维数组或表格进行处理,只要改变间址寄存器BX,BP,SI,DI中的内容,用一条寄存器间接寻址指令就可对连续的存储器单元进行存/取操作。
转载请注明:懒人档案室 » 8086/8088可用于间接寻址的寄存器有哪些