当前位置: 首页 > news >正文

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)+2\rightarrowPC,即执行从编号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(寄存器)1200H12FCH
存放内容1200H12FCH38D8H

由于是寄存器间接寻址,则8号寄存器放的是有效操作数所在的主存地址,即有效地址。故1200H为有效地址,而12FCH为真实操作数。大家千万要注意,题目中问的是有效地址还是操作数!不审题就容易功亏一篑。

考点3:偏移寻址

5、偏移寻址

①相对寻址

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

        这种寻址的优点是操作数的地址不固定,岁PC值的变化而变化,而且于指令地址见总是差一个固定值,因此便于程序浮动。

        但是特别注意:当CPU从存储器中取出一字节是,会自动执行(PC)+1\rightarrowPC,也就是说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即为操作数01补码,快
直接寻址EA=A13
一次间接寻址EA=(A)28扩大寻址范围、有利于子程序返回
寄存器寻址EA=R02快,不访存,指令字长短
寄存器一次间接寻址EA=(R)13扩大寻址范围
相对寻址EA=(PC)+A15便于程序浮动
基址寻址EA=(BR)+A15面向系统
变址寻址EA=(IX)+A15面向用户,解决数组

例题()便于处理数组问题。

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适合作为冷数据…...

图像金字塔,原理、实现及应用

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

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格式的相互转化&…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...