基址寻址和变址寻址区别(白话版)

  在寻址方式里面,基址寻址和变址寻址是比较常用的两种寻址方式。但因为两种太像了,总是搞不清楚。上网查到的描述太过专业看起来特别吃力。写这篇,希望能用一种通俗易懂的方式对二者做个区分。
  为什么总容易搞混呢?其实基址寻址和变址寻址都是相对寻址中的一种。计算模板都可以概括为:A=B+C(A是逻辑地址)。而且寄存器里面对这两种寻址方式都设计了专门的寄存器。基址寻址叫基址寄存器,变址寻址叫变址寄存器。寄存器里面的内容就相当于公式里的B吧。
  一个比较容易混的地方就是,基址寻址中C是变量(可以动的),而变址寻址中B是变量。那为什么要这么设计呢?设计的目的还要从功能上说(它要完成什么样的任务,自然使用什么设计方法)
  基址寻址实现的是程序段之间的转移,比如设置基址为0,我在100那个有个程序,利用基址寻址到100(一顿执行,此处省略~)。我在200又有个程序,再利用基址寻址到200。是不是每次一条指令就可以完成?所以对于基址寻址功能的描述中有一句:实现程序的动态再定位。
  变址寻址适合循环,那是怎么实现的呢?常使用的for循环都知道,每次加1。是一个固定的值。从100开始,下次101,下次102。。。用基址寻址实现可不可以呢?当然可以!按照基址寻址中基址不变的原则,更改后面的偏移量就可以。那相当于100次偏移,要100个不同的指令(后面的偏移量不同)。好麻烦啊!那变址如何实现的呢?变址寻址把100存在式子里的C中,通过改变变址寄存器中的数值,一次加1。指令中放的可都是寄存器的编号,虽然寄存器数值变了,编号还是固定的。这样看下来,整体执行的不就是同一条指令了吗?真方便啊!

  虽然二者很容易混淆,但如果意识到这些,我相信应该可以正确的区分了吧!嘿嘿

因为作者水平有限,如果错误之处,请在下方评论区指出,谢谢!

  • 64
    点赞
  • 111
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值