408考研计算机之计算机组成与设计——知识点及其做题经验篇目3:指令的寻址方式
上篇文章我们讲到,指令的基本格式,一条指令通常包括操作码字段和地址码字段两部分:
操作码字段 | 地址码字段 |
并且我们还讲到根据操作数地址码的数目不同,可将指令分为零一二三四地址指令。感兴趣的小伙伴们可以看看小编的上一篇文章:
408考研计算机之计算机组成与设计——知识点及其做题经验篇目2:指令系统_计算机鬼才~的博客-CSDN博客
那么本期的博客小编将会探讨,计算机通过地址码字段,找到指令或者操作数有效地址的方式,跟随好小编的脚步,我们发车啦!
目录
一、指令寻址
1、顺序寻址
2、跳跃寻址
二、数据寻址具体方式
1、直接寻址与间接寻址
①直接寻址
②间接寻址
2、寄存器寻址与寄存器间接寻址
①寄存器寻址
②寄存器间接寻址
3、立即寻址
4、隐含寻址
5、偏移寻址
①相对寻址
②基址寻址
③变址寻址
6、堆栈寻址
三、几种寻址的比较
一、指令寻址
考点1:指令寻址
寻址方式分为指令寻址与数据寻址两大类,其中寻找下一条将要执行的指令地址称为指令地址;寻找本条指令的数据地址称为数据寻址。
其中较为简单的是指令寻址,看篇幅我们就知道,数据寻址有十种方法,基本上除了考点1里面讲到了指令寻址,其他的全是数据寻址。
指令寻址有有两种方式,一种是顺序寻址方式,另一种是跳跃寻址方式。
1、顺序寻址
《王道考研》书上边就一句话,叫“通过程序计数器PC加1(1个指令字长),自动形成下一条指令的地址”。
但其实,这个自动加一,大有文章可言,尤其是括号里的1个指令字长,妙不可言。这个1是泛指而不是特指,你可以把这个1理解为,下一条指令的地址是下一条地址,但是具体问题要具体分析。比如说当主存按字节编址,而指令字长有两个字节,如下图:
编号1:01101100 |
编号2:10100011 |
编号3:11001010 |
编号4:00110010 |
…… |
主存按字节变址,所以每8位构成主存的一个存储单元 ,此时的PC存放的内容为01101100的地址,我们暂时以编号1来称呼这个地址名。而由于指令字长有两个字节,即编号1(01101100)与编号2(10100011)共同构成了这一条指令。那么想要执行下一条指令,我们需要执行(PC)+2PC,即执行从编号3开始构成的这条指令。
这一问题不大容易直接考,但是融合到某个选择题或者大题里面,不注意就容易错!
2、跳跃寻址
通过转移类指令来实现,比如说无条件转移指令、有条件转移指令。所谓跳跃,是指下条指令的地址不由程序计数器PC自动给出,而是由本条指令给出下条指令的计算方式,跳跃的结果为当前指令修改PC值,所以下一条指令依然由PC给出。
我们看一道例题,感受一下:
例题:对按字寻址的机器,程序计数器和指令寄存器的位数各取决于___、____
A.机器字长
B.存储器的字数
C.指令字长
D.地址总线宽度
【答案】:B、 C
【解析】:程序寄存器PC存放的是下一条执行指令的地址,即指令在内存中的地址,指令寄存器IR存放的是当前指令的内容,所以程序计数器PC的位数取决于存储器的字数,而指令寄存器IR取决于指令字长。
二、数据寻址具体方式
但是在具体讲之前,我们先要明白几个符号。指令中的地址码并不代表操作数的真实地址,这种地址我们称为形式地址A,而经过数据寻址,我们找到操作数真实的地址,这种地址称为有效地址EA。
其中A代表地址,即编号,而(A)代表A地址中存放的数字。
操作码 | 寻址特征 | 形式地址A |
考点2:简单的寻址
1、直接寻址与间接寻址
如果就这样讲,略显单调,所以小编在这一部分的开头要举一个小例子:假设小伍同学与桃园小区的很多小朋友都是是好朋友,小伍同学每天放学后都要去一个好朋友的家里玩,但是又记不清每一个同学的家庭住址,小伍同学有一个只能记录一个人家庭住址的备忘录,此时我们该如何找到这个“地址”呢?
①直接寻址
第一种方式:备忘录上就是要找的这个好朋友的地址,找到某个好朋友的家庭住址。
这种方式很直接,指令字中的形式地址A就是操作数的真实地址EA,即EA=A。而且只用去一个好朋友的家里,即只用访存一次,而且还特别简单好理解。
②间接寻址
第二种方式:查备忘录,然后先去第一个好朋友A的家里,让这个好朋友告诉自己好朋友B的家庭地址。我不能直接知道地址,但是我可以问别人,让别人告诉我正确的地址。
这种方式指令的地址字段给出的形式地址不是操作数真正的地址,而是操作数有效地址所在的存储单元的地址,也就是说操作数地址的地址,即EA=(A)。
同时,倘若第一个好朋友A也不知道B的地址,他可以告诉你C的地址,并且说“我不知道B住哪儿,但我知道C在哪儿,你去问一问C吧,C没准知道B住在哪儿”。这种情况就是多次间接寻址了。在实际的主存中,主存字第一位为1时,表示去除的仍然不是操作数的地址,这个1就好比是“我不知道B住在哪儿”这句话。
间接寻址的优点为:可扩大寻址范围,因为有效地址EA的位数大于形式地址A的位数,也便于完成子程序的返回,缺点是,要进行多次访存(到好几个小朋友的家里去问),极大的降低了时间。
2、寄存器寻址与寄存器间接寻址
①寄存器寻址
寄存器寻址是指在指令字中直接给出操作数所在的寄存器编号,即EA=R,其操作数在由R所指的寄存器内。
寄存器寻址的优点是指令在执行阶段不访问主存,只访问寄存器,引寄存器数量较少,对应地址码长度较小,使得指令字段且不用访存,所以执行速度快,缺点是寄存器价格太贵了,寄存器的个数有限。
②寄存器间接寻址
寄存器间接寻址是指在寄存器R中给出的不是一个操作数,而操作数所在主存单元的地址,即(EA)=R。
寄存器间接寻址的特点是,与一般间接寻址相比速度更快,但指令的执行阶段需要访问主存。注意哦,不出意外的话,就访存一次,《王道考研》书上边没有提到多次寄存器间接寻址。
3、立即寻址
这种类型的指令的地址字段指出的不是操作数的地址,而是操作数本身,又称立即数,采用补码表示。其中#表示立即寻址特征,A就是操作数。
立即寻址的优点是指令在执行阶段不访问主存,指令执行时间最短,缺点为A的位数限制了立即数的范围。
4、隐含寻址
这种类型的指令不明显给出操作数的地址,而是在指令中隐含操作数的地址。例如单地址的指令格式就不明显的在地址段指出第二操作数的地址,而规定累加器ACC作为第二操作数地址,累加器ACC对单地址指令格式来说就是隐含寻址。
隐含寻址的优点是有利于缩短指令字长,缺点是需增加存储操作数货隐含地址的硬件。
来看两道道题目:
例题1:为了简化地址结构,我们采用()
A.立即寻址
B.寄存器寻址
C.隐含寻址
D.间接寻址
【答案】:C
【解析】:隐地址不给出明显的操作数地址,而在指令中隐含操作数的地址,因此可以简化地址结构,而CPU中的寄存器数量不会太多,用很短的编码就可以指定寄存器,因此也能有效的缩短地址段的位数。但是寄存器寻址简化地址结构的效果没有隐含寻址更加厉害,所以当选项中有隐含寻址的时候,就选隐含寻址,没有隐含寻址的时候,就选寄存器寻址
例题2:假设某条指令的第一个操作数采用寄存器间接寻址的方式,指令中给出的寄存器编号为8,8号寄存器的内容为1200H,地址为1200H的单元中的内容为12FCH,地址为12FCH的单元中的内容为38D8H,则该操作数的有效地址为()
A.8
B.1200H
C.12FCH
D.38D8H
【答案】:B
【解析】:我们画一个表,感受一下:
编号/主存号 | 8(寄存器) | 1200H | 12FCH |
存放内容 | 1200H | 12FCH | 38D8H |
由于是寄存器间接寻址,则8号寄存器放的是有效操作数所在的主存地址,即有效地址。故1200H为有效地址,而12FCH为真实操作数。大家千万要注意,题目中问的是有效地址还是操作数!不审题就容易功亏一篑。
考点3:偏移寻址
5、偏移寻址
①相对寻址
相对寻址是把PC的内容加上指令格式中的形式地址A而形成操作数的有效地址,即EA=(PC)+A,其中A是相对于当前PC值的位移量,可正可负,补码表示。
这种寻址的优点是操作数的地址不固定,岁PC值的变化而变化,而且于指令地址见总是差一个固定值,因此便于程序浮动。
但是特别注意:当CPU从存储器中取出一字节是,会自动执行(PC)+1PC,也就是说PC先自增,用这个自增的地址进行偏移,我们看一道例题就能立马明白:
例题:(2009年统考真题)某机器字长为16位,主存按字节编址,转移指令采用相对寻址,由两字节组成,第一字节为操作码字段,第二字段为相对位移量字段,假定取指令时,每去一字节PC自动加1,若某次转移指令所在主存地址为2000H,相对位移量字段的内容为06H,则该转移指令成功转移后的目的地址为()
A.2006H
B.2007H
C.2008H
D.2009H
【答案】:C
【解析】:首先这是2009年的统考题,直接选D(笑死,不会真的有人这么想吧)。首先机器字长为16位,即两个字节,那么CPU取出这一指令时,PC会立马加2,存放2002H,然后经过偏移06H,得到目的地址为2008H。
②基址寻址
基址寻址是将CPU中的基址寄存器BR的内容加上指令格式中的形式地址A二形成操作数的有效地址,即EA=(BA)+A。其中基址寄存器既能采用专用寄存器,又能采用通用寄存器。
至于基址寻址的功能,我们一句话总结为“面向系统,主要用于多道程序或数据分配空间”,很好理解,因为基址寄存器的内容不变,而形式地址则作为偏移量。用户不必为自己的程序存于哪个空间区域而烦恼,系统会安排的,因此有利于多道程序。
③变址寻址
变址寻址是指有效地址EA等于指令字中形式地址A与变址寄存器IX的内容之和,即EA=(IX)+A。
我们依然用一句话总结“面向用户,主要用于处理好数组问题”,变址寄存器的内容由用户设定,但是指令字中的A是不可变的。而且在数组处理过程中,可设定A为数组首地址,不断改变变址寄存器IX的内容,便很容易形成数组中任意一个数据的地址,特别适合编制循环程序。
6、堆栈寻址
堆栈是存储器中一块特定的、满足后进先出原则的存储区,该存储区中读写单元的地址由一个特定的寄存器给出,该寄存器称为SP,即堆栈指针。
三、几种寻址的比较
考点4:对比
寻址方式 | 有效地址 | 访存次数 | 速度 | 用途与特点 |
隐含寻址 | 程序指定 | 0 | \ | 缩短指令字长 |
立即寻址 | A即为操作数 | 0 | 1 | 补码,快 |
直接寻址 | EA=A | 1 | 3 | 快 |
一次间接寻址 | EA=(A) | 2 | 8 | 扩大寻址范围、有利于子程序返回 |
寄存器寻址 | EA=R | 0 | 2 | 快,不访存,指令字长短 |
寄存器一次间接寻址 | EA=(R) | 1 | 3 | 扩大寻址范围 |
相对寻址 | EA=(PC)+A | 1 | 5 | 便于程序浮动 |
基址寻址 | EA=(BR)+A | 1 | 5 | 面向系统 |
变址寻址 | EA=(IX)+A | 1 | 5 | 面向用户,解决数组 |
例题()便于处理数组问题。
A.间接寻址
B.变址寻址
C.相对寻址
D.基址寻址
【答案】:B
【解析】:略,自己重新看上边的表格
好的,本期的计算机考研总结性文章就到此为止啦,感兴趣的好兄弟们快来关注一波,让小编感受到大家的赞赏。
相关文章:

408考研计算机之计算机组成与设计——知识点及其做题经验篇目3:指令的寻址方式
上篇文章我们讲到,指令的基本格式,一条指令通常包括操作码字段和地址码字段两部分: 操作码字段地址码字段并且我们还讲到根据操作数地址码的数目不同,可将指令分为零一二三四地址指令。感兴趣的小伙伴们可以看看小编的上一篇文章…...

前端包管理工具:npm,yarn、cnpm、npx、pnpm
包管理工具npm Node Package Manager,也就是Node包管理器; 但是目前已经不仅仅是Node包管理器了,在前端项目中我们也在使用它来管理依赖的包; 比如vue、vue-router、vuex、express、koa、react、react-dom、axios、babel、webpack…...

推荐系统 FM因式分解
reference:知乎 FM算法解析 LR算法没有二阶交叉 如果是id类特征,这里的x是0/1,raw的特征输入就是float,当然,在我的理解里,一般会把raw的特征进行分桶,还是映射到0/1特征,不然这个w…...

Maven基础入门
文章目录Maven简介Maven 工作模式1.仓库2.坐标Maven的基本使用1.常用命令2.生命周期依赖管理1.依赖配置2.依赖传递3.可选依赖4.排除依赖5.依赖范围IDEA配置MavenMaven简介 Apache Maven 是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一…...

传输层协议 TCP UDP
目录 协议前菜 端口号 编辑端口号范围划分 认识知名端口号(Well-Know Port Number) netstat pidof 传输层协议 UDP协议 UDP协议端格式 UDP的特点 面向数据报 UDP的缓冲区 UDP使用注意事项 基于UDP的应用层协议 TCP协议 TCP协议概念 TCP协议段格式 标志…...

一点就分享系列(实践篇6——上篇)【迟到补发】Yolo-High_level系列算法开源项目融入V8 旨在研究和兼容使用【持续更新】
一点就分享系列(实践篇5-补更篇)[迟到补发]—Yolo系列算法开源项目融入V8旨在研究和兼容使用[持续更新] 题外话 去年我一直复读机式强调High-level在工业界已经饱和的情况,目的是呼吁更多人看准自己,不管是数字孪生交叉领域&#…...

buu RSA 1 (Crypto 第一页)
题目描述: 两个文件,都用记事本打开,记住用记事本打开 pub.key: -----BEGIN PUBLIC KEY----- MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhAMAzLFxkrkcYL2wch21CM2kQVFpY97 /AvKr1rzQczdAgMBAAE -----END PUBLIC KEY-----flag.enc: A柪YJ^ 柛x秥?y…...

Python 二分查找:bisect库的使用
✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…...

性能优化之HBase性能调优
HBase是Hadoop生态系统中的一个组件,是一个分布式、面向列存储的内存型开源数据库,可以支持数百万列(MySQL4张表在HBase中对应1个表,4个列)、超过10亿行的数据存储。可用作:冷热数据分离HBase适合作为冷数据…...

图像金字塔,原理、实现及应用
什么是图像金字塔 图像金字塔是对图像的一种多尺度表达,将各个尺度的图像按照分辨率从小到大,依次从上到下排列,就会形成类似金字塔的结构,因此称为图像金字塔。 常见的图像金字塔有两类,一种是高斯金字塔࿰…...

08-Oracle游标管理(定义,打开、获取数据及关闭游标)
目标 1.确定何时需要显示游标2.声明、打开和关闭显示游标3.从显示游标中提取数据4.了解与游标有关的属性5.使用游标FOR循环检索游标中的数据6.在游标FOR循环的子查询中声明游标7.评估使用逻辑运算符结合在一起的布尔条件游标 1、在使用一个PL/SQL块来执行DML语句或只返回一行结…...
Python判断字符串是否包含特定子串的7种方法
目录1、使用 in 和 not in2、使用 find 方法3、使用 index 方法4、使用 count 方法5、通过魔法方法6、借助 operator7、使用正则匹配转自:https://cloud.tencent.com/developer/article/1699719我们经常会遇这样一个需求:判断字符串中是否包含某个关键词…...

aop实现接口访问频率限制
引言 项目开发中我们有时会用到一些第三方付费的接口,这些接口的每次调用都会产生一些费用,有时会有别有用心之人恶意调用我们的接口,造成经济损失;或者有时需要对一些执行时间比较长的的接口进行频率限制,这里我就简…...

Hive---窗口函数
Hive窗口函数 其他函数: Hive—Hive函数 文章目录Hive窗口函数开窗数据准备建表导入数据聚合函数window子句LAG(col,n,default_val) 往前第 n 行数据LEAD(col,n, default_val) 往后第 n 行数据ROW_NUMBER() 会根据顺序计算RANK() 排序相同时会重复,总数不会变DENSE…...
JavaSe第7次笔记
1. C语言里面,NULL是0地址。Java中null和0地址没关系。 2.数组可以做方法的返回值。 3.可以使用变量作为数组的个数开辟空间。 4.断言assert,需要设置。 5.排序:Arrays. sort(array); 6.查找: int index Arrays. binarySea…...
什么是 Service 以及描述下它的生命周期。Service 有哪些启动方法,有 什么区别,怎样停用 Service?
在 Service 的生命周期中,被回调的方法比 Activity 少一些,只有 onCreate, onStart, onDestroy, onBind 和 onUnbind。 通常有两种方式启动一个 Service,他们对 Service 生命周期的影响是不一样的。 1. 通过 startService Service 会经历 onCreate 到 onStart,然后处于运行…...
Redis部署
JAVA安装 mkdir /usr/local/javacd /usr/local/java/wget --no-check-certificate --no-cookies --header "Cookie: oraclelicenseaccept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u13…...

AT32F437制作Bootloader然后实现Http OTA升级
首先创建一个AT32F437的工程,然后发现调试工程配置这里的型号和创建工程选的型号不一致,手动更改一下,使用PW Link下载程序的话还要配置一下pyocd.exe的路径。 打开drv_clk.c文件的调试功能看下系统时钟频率。 项目使用的是AT32F437VMT7芯片&…...
Springboot项目启动初始化数据缓存
1.从Java EE5规范开始,Servlet中增加了两个影响Servlet生命周期的注解, PostConstruct和PreDestroy,这两个注解被用来修饰一个非静态的void()方法,被PostConstruct修饰的方法会在服务器加载Servlet的时候运…...

深度学习必备知识——模型数据集Yolo与Voc格式文件相互转化
在深度学习中,第一步要做的往往就是处理数据集,尤其是学习百度飞桨PaddlePaddle的小伙伴,数据集经常要用Voc格式的,比如性能突出的ppyolo等模型。所以学会数据集转化的本领是十分必要的。这篇博客就带你一起进行Yolo与Voc格式的相互转化&…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...