七种寻址方式

七种寻址方式(从该处学习转载,感谢,如有侵犯,请联系删除)

  1. 立即寻址

操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。

立即数寻址方式通常用于对通用寄存器或内存单元赋初值。说白了就是在代码中直接向寄存器赋固定值。

MOV AX,4576H;将16位数据4576H传送到AX寄存器

  1. 寄存器寻址方式

指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。把在指令中指出所使用寄存器(即:寄存器的助忆符)的寻址方式称为寄存器寻址方式。
寄存器寻址方式是一种简单快捷的寻址方式,源和目的操作数都可以是寄存器。
1、源操作数是寄存器寻址方式
如:ADD VARD, EAX ADD VARW, AX MOV VARB, BH等。
2、目的操作数是寄存器寻址方式
如:ADD BH, 78h ADD AX, 1234h MOV EBX, 12345678H等。
3、源和目的操作数都是寄存器寻址方式
如:MOV EAX, EBX MOV AX, BX MOV DH, BL等。
由于指令所需的操作数已存储在寄存器中,或操作的结果存入寄存器,这样,在指令执行过程中,会减少读/写存储器单元的次数,所以,使用寄存器寻址方式的指令具有较快的执行速度。通常情况下,我们提倡在编写汇编语言程序时,应尽可能地使用寄存器寻址方式,但也不要把它绝对化。

  1. 直接寻址

指令所要的操作数存放在内存中,在指令中直接给出该操作数的有效地址,这种寻址方式为直接寻址方式。

在通常情况下,操作数存放在数据段中,所以,其物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使用段超越前缀,那么,操作数可存放在其它段。

说白了,就是找到操作地址然后取上面的值,就是直接寻址

  1. 寄存器间接寻址

操作数在存储器中,操作数的有效地址用SI、DI、BX和BP等四个寄存器之一来指定,称这种寻址方式为寄存器间接寻址方式。该寻址方式物理地址的计算方法如下:
 

说白了就是,需要基地址寄存器、偏移地址寄存器,就能够找到偏移后的地址,从而取得值

  1. 寄存器相对寻址方式

操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、D

I)的内容和指令中的8位/16位偏移量之和。其有效地址的计算公式如公式所示。

说白了,就是在寄存器间接寻址的基础上,偏移地址也要变址寄存器通过累加一个长度(偏移8位、16位)之后,再加上段寄存器地址得到最终地址。

  1. 基址加变址寻址方式

操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容之和。其有效地址的计算公式如公式所示。


在不使用段超越前缀的情况下,规定:如果有效地址中含有BP,则缺省的段寄存器为SS;否则,缺省的段寄存器为DS。

说白了,就是地址=基址+变址+段寄存器地址

  1. 相对基址加变址寻址方式

作数在存储器中,其有效地址是一个基址寄存器(BX、BP)的值、一个变址寄存器(SI、DI)的值和指令中的8位/16位偏移量之和。其有效地址的计算公式如公式所示。


在不使用段超越前缀的情况下,规定:如果有效地址中含有BP,则其缺省的段寄存器为SS;否则,其缺省的段寄存器为DS。

说白了就是地址=基址+变址+8位/16位偏移量+段寄存器地址。

总结:

总的来说,后面几种真的记不住,记住寻址效率:立即寻址>寄存器寻址>直接寻址>间接寻址>其他。

  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值