8086的寻址方式及例题解析_【80x86汇编】与数据有关的寻址方式

750569c9775a93d54cf9b60d14080acd.png

寻址方式(addressing mode)是指令取得操作数地址所使用的方式,与数据有关的寻址方式通过确定操作数地址来找到操作数。以下方式以MOV指令为例。

非存储器寻址

MOV  AX, 1234H

MOV指令将目标操作数(第二个操作数)1234H赋值给源操作数(第一个操作数),即赋值给AX寄存器。此时3064H这个数被称为立即数,它是指令的一个组成部分,与指令存放在一起,即存放在代码段中。这是立即寻址方式(immediate addressing)

MOV  AX, BX

此时MOV指令将BX寄存器中的值赋给AX寄存器,即若(BX)=1234H,则执行指令后(AX)=1234H,(BX)保持不变。此时寻址的操作数存放在BX寄存器中。这是寄存器寻址方式(register addressing)

以上两种寻址方式,操作数都存储在代码段和寄存器内,不需要访问除代码段的存储器。

存储器中的操作数

MOV  AX, [1234H]
MOV  AX, [BX]

这里的方括号可以理解为访问存储器,方括号括起来的东西(数或寄存器)是这个操作数在存储器中的地址,[1234H]取得的是存储器的数据段中1234H位置所存储的数。若这个位置存储的是2000H,则执行第一条MOV后(AX)=2000H,这是直接寻址方式(direct addressing)

[BX]同理,若(BX)=1234H,则[BX]相当于[1234H],BX被称为基址寄存器。这是寄存器间接寻址方式(register indirect addressing),两种寻址方式与上一节中的两种对应。

注意这里的1234H是2000H实际存放位置的位移量,即标识了2000H在数据段(即此时默认的段)中的相对位置,相对位置被称为有效地址,而不是实际存放的物理地址。实模式中,物理地址 = 段起点地址 + 位移量,数据段的起点地址存储在数据段寄存器DS中,DS由于是默认的寄存器所以在指令中省略了,也就是第一个指令也相当于:

MOV  AX, DS:[1234H]

这时若DS标示的段起始地址为20000H,则2000H实际存放的物理地址在20000H + 1234H = 21234H处。

若需要跨段访问数据,也可修改使用的段寄存器。

变址寄存器

MOV  AX, 1000H[SI]
MOV  AX, [BX][SI]

这里除了由数表示的位移量和基址寄存器BX标示的基址之外,出现了变址寄存器SI。此时有效地址为原来的地址加上SI中保存的地址,所以这两个指令也可以写为:

MOV  AX, [1000H+SI]
MOV  AX, [BX+SI]

位移量加上变址寄存器相对寻址方式(register relative addressing)基址加上变址基址变址寻址方式(based indexed addressing)

基址、变址和位移量可以也同时使用:

MOV  AX, 1000H[BX][SI]

有效地址为三者之和,此为相对基址变址寻址方式(relative based indexed addressing)

比例因子

比例因子出现在80386和后续机型中,它的值只能是1,2,4或者8,所以包含比例因子的寻址方式不能用在8086/80286中。比例因子用于对变址寄存器的内容进行运算,变址的值等于比例因子乘以变址寄存器的内容。

MOV  AX, 1000H[SI*2]
MOV  AX, [BX][SI*4]
MOV  AX, 1000H[BX][SI*8]

例如第一条指令中,若(SI)=1234H,则赋给AX的操作数所在的有效地址为1000H + 1234H*2 = 1000H + 2468H = 3468H。

这三种寻址方法和上一节中的三种对应,分别为比例变址寻址方式(scaled indexed addressing)基址比例变址寻址方式(based scaled indexed addressing)相对基址比例变址寻址方式(relative based scaled indexed addressing)

总结

对于操作数存放在代码段外的存储器时的寻址方式,MOV指令的源操作数给出的都是寻址操作数的有效地址。

有效地址 = 基址寄存器存放的基址 +(变址寄存器存放的变址 × 比例因子)+ 位移量

物理地址 = 段寄存器标示的段起始地址 + 有效地址

10种寻址方式的总结:

MOV  AX, 1000H              ;立即寻址方式(immediate addressing)
MOV  AX, BX                 ;寄存器寻址方式(register addressing)
MOV  AX, [1000H]            ;直接寻址方式(direct addressing)
MOV  AX, [BX]               ;寄存器间接寻址方式(register indirect addressing)
MOV  AX, 1000H[SI]          ;寄存器相对寻址方式(register relative addressing)
MOV  AX, [BX][SI]           ;基址变址寻址方式(based indexed addressing)
MOV  AX, 1000H[BX][SI]      ;相对基址变址寻址方式(relative based indexed addressing)
MOV  AX, 1000H[SI*2]        ;比例变址寻址方式(scaled indexed addressing)
MOV  AX, [BX][SI*4]         ;基址比例变址寻址方式(based scaled indexed addressing)
MOV  AX, 1000H[BX][SI*8]    ;相对基址比例变址寻址方式(relative based scaled indexed addressing)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值