打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
数据寻址——偏移寻址

文章目录

偏移寻址

相对寻址、基址寻址、变址寻址都属于偏移寻址。

三种偏移地址区别:

但是他们之间还是有区别的,在于偏移的“起点”不一样

  • 基址寻址:以程序的起始存放地址作为“起点”
  • 变址寻址:程序员自己决定从哪里作为“起点”
  • 相对寻址:以程序计数器PC所指地址作为“起点”

基址寻址

基址寻址:将CPU中基址寄存器(BR)的内容加上指令格式中的形式地址A,而形成操作数的有效地址,即EA=(BR)+A

下图是两种基址寄存器的构成方式:

问题:(b)要用几个bit指明寄存器?

根据通用寄存器总数判断

假如通用寄存器有八个,因为 23=8 在,用3个bit 就可以指明 0~7 共八个数

基址寻址的作用

优点

优点:便于程序“浮动”,方便实现多道程序并发运行

扩充一下哈:

优点

  1. 可扩大寻址范围(基址寄存器的位数大于形式地址A的位数);
  2. 用户不必考虑自己的程序存于主存的哪一空间区域,故有利于多道程序设计;
  3. 可用于编制浮动程序(整个程序在内存里边的浮动) 。

如下图是对一个简单程序的基址寻址图解

注意:

基址寄存器是面向操作系统的,其内容由操作系统或管理程序确定。在程序执行过程中,基址寄存器的内容不变(作为基地址),形式地址可变(作为偏移量)。

当采用通用寄存器作为基址寄存器时,可由用户决定哪个寄存器作为基址寄存器,但其内容仍由操作系统确定

变址寻址

变址寻址:有效地址EA等于指令字中的形式地址A变址寄存器IX的内容相加之和,即EA= (IX)+A,其中IX可为变址寄存器(专用),也可用通用寄存器作为变址寄存器 。

注意:

变址寄存器是面向用户的,在程序执行过程中,变址寄存器的内容可由用户改变(IX作为偏移量),形式地址A不变(作为基地址) 。

  • 这里对比一下基址寄存器中BR与A的执行过程:
    基址寻址中,BR保持不变作为基地址,A作为偏移量

变址寻址的作用

我们先探讨一个问题:

当我们在用高级语言进行编写循环语句的时候,我们看着是很简单的,就像下面的C语言循环语句。

for(int i=0; i<10; i++){
sum += a[i];
}

但是再计算机中他是这个样子的,


中间还省略了相加重复的操作,阿这,如果加个一万次,那你还能接收吗?


答案是:


那么是时候召唤变址寻址了!!!!!

在数组处理过程中,可设定A为数组的 首地址,不断改变 变址寄存器IX的内容,便可很容易形成数组中任一数据的地址,特别适合编制循环程序。

我们将上面的改成变址寻址就是下图这个样子

优点

在数组处理过程中,可设定A为数组的首地址,不断改变变址寄存器IX的内容,便可很容易形成数组中任一数据的地址,特别适合编制循环程序。

注意:

变址寄存器是面向用户的,在程序执行过程中,变址寄存器的内容可由用户改变(作为偏移量),形式地址A不变(作为基地址)

补充:基址&变址复合寻址

实际应用中往往需要多种寻址方式复合使用(可理解为复合函数)

相对寻址

相对寻址:把程序计数器PC的内容加上指令格式中的形式地址A而形成操作数的有效地址,即EA=(PC)+A,其中A是相对于PC所指地址的位移量,可正可负,补码表示 。

相对寻址的作用

我们在探讨一下:还是刚才的程序

想一下:如果代码越来越多,我们要挪动for循环的位置呢?只通过直接和变址寻址还能正确访问地址吗?


怎么解决这个问题呢?我么可以在此基础上+上PC值,就能正确访问了,如下图所示。

优点:

操作数的地址不是固定的,它随着PC值的变化而变化,并且与指令地址之间总是相差一个固定值,因此便于程序浮动(一段代码在程序内部的浮动)。

相对寻址广泛应用于转移指令

小结

*扩展:硬件如何实现数的“比较”

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
微机原理——3.8086指令系统
微机原理与接口技术知识点总结(重点,习题,)
学习之道 【分享】汇编学习笔记 [论坛存档] - 看雪软件安全论坛
关于CM3的指令系统详解
探索机器码(8086)
汇编语言之寄存器(详细介绍)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服