预习计算机组成原理之指令系统——笔记5

系列文章目录

第七章到第十章是讲解CPU的控制器相关内容
第七章 指令系统



前言

今天是八月一号,继续预习第七章CPU的内容吧,进度有点慢了,最近有些摸鱼。视频还有将近40P,希望这个星期能够学完。

机器指令——计算机的CPU可以直接识别并执行的操作命令
指令集——一个处理器可以识别的并执行的所有机器指令的总和,就是指令集
指令系统是软件和硬件的交界,软件通过指令系统告诉硬件做什么,硬件通过指令系统反应硬件当前状态
在这里插入图片描述


一、机器指令

在这里插入图片描述

1.1 指令的一般格式

操作码:不仅反应机器做什么操作,很多机器中还要指出对什么样的数据做操作
对浮点数还是定点数的加法,可能是不同的操作码
对于一些指令集,操作码还指出了操作数的寻址方式


长度固定的操作码的对应硬件实践更加简单
如今x86系列的处理器就是使用的长度可变的操作码
而且在很多机器中,操作码不像示意图中所示放在一端,是分布在整个指令中的
在这里插入图片描述

1.2 操作码——扩展操作码技术

下面展示,保留操作码的某一个码点,来进行操作码的扩展
因为如果只是规定操作码的位数,比如四位,那么指令集只能有16条指令,这是不够的
用保留码点的方式,让计算机识别出现在的操作码位数到底是多少
四个一作为扩展的标志
因此要注意设计的时候短操作码一定不能是长操作码的前缀,否则机器很难识别出来这操作码是长的还是短的,但下面的是可以的
在这里插入图片描述
在一组操作码中,可以保留不止一种来在下一级进行扩展,这里容易出计算题
如何让八位的操作码有31个?
四位操作码保留两个作为扩展,八位操作码保留一个作为扩展
在这里插入图片描述

1.3 地址码

在一次操作中,取下一次操作的地址,两次取操作数,一次存结果( A 4 A_4 A4取下一条指令的访存算作下一次操作中)
若把下一条指令不是存在 A 4 A_4 A4而是PC中,就可以从四地址变三地址
四地址到三地址,地址位数变大,寻址空间变大了
在这里插入图片描述
这里注意,ACC寄存器的使用不占用访存的次数,因此在一地址的机器指令中,只需要进行两次访存,一次取指令地址,一次访问 A 1 A_1 A1
还要注意零地址的指令:对ACC寄存器进行操作(清零、取反、对某一位进行操作等等,ACC可以实现隐含寻址的方式,在指令的操作码中就可以直接做出规定);堆栈类的指令(堆栈类的计算机,如果进行一些基本操作,只需要操作码就可以了,例如,ADD表示把栈顶的两个操作数进行相加后保存在栈顶)

零地址的指令可能不需要地址,比如停机指令
在这里插入图片描述

1.4 指令字长

指令集中的指令字长可以是固定的也可以是变化的
如果指令字长是固定的,也就是指令集中所有的指令是一样长的,那么它的长度可以是存储字长,一般是存储字长的整数倍,以便于取指
在这里插入图片描述

1.5 小结

在上面的推算可以得到,在用寄存器等硬件资源来减少地址码个数的时候,可以扩大指令的寻址范围,可以缩短指令的字长(若不是固定指令长度,地址码个数变少,缩短指令字长),可以减少访存的次数。
如果地址字段用寄存器的编号来填写的话,不仅不需要访存,而且因为寄存器较少,不需要过多的位数编码,所以可以缩短指令字长
在这里插入图片描述

二、操作数类型和操作类型

2.1 操作数类型

地址:如果是绝对地址 ,那么他是无符号整数;相对地址 ,那么是有符号数
不同的操作数可能有不同的长度
在这里插入图片描述

2.2 数据在存储器中的存放方式

在第四章介绍过的大端和小端存放方式
字地址就是这个字的最低地址字节的地址
字地址为高字节地址,大端存储
字地址为低字节地址,小端存储
在这里插入图片描述
一种存储方式是从任意位置开始存储,但是访存取字的时候是一个字一个字取的,除了访问一个字节以外,其他都可能存在跨字的现象,需要两次访存以读取整个存储。增加了访存的时间
注意区分存储字长和机器字长,存储字长是存取的时候的一个单位,但是机器字长是寄存器长度。出题时候出过一个指令周期是多少个机器周期,我们认为基本上一个机器周期等同于一个存取周期,这就要看指令长度是几个存储字长。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 操作类型

RAM的算数逻辑操作的特点,正反减法都是有相对应的指令,减少了减数和被减数的调整
在这里插入图片描述
在这里插入图片描述

这里举例中的“D”是完成触发器
D=0,执行跳转
D=1,执行下面的程序,完成输入或者输出操作
在这里插入图片描述

返回的时候,返回的是执行的下一条指令的地址

在这里插入图片描述
陷阱指令,操作码非法,操作数访问越界,除法操作中除数为0,这时候CPU直接执行陷阱
并不是指令集中的指令,由硬件直接来做的被称为隐指令
在这里插入图片描述
并不是所有的指令集都有输入输出指令
这里是否有输入输出的指令,取决于是否将I/O端口作为内存编址的一部分
若将I/O端口作为内存编址的一部分,那么不需要输入输出指令,可以直接用访存指令
** I/O端口有独立地址空间或者单独编址,那么需要单独的输入输出指令 **
输入指令:将端口n的内容传输到AX寄存器
输出指令:将AX寄存器内容由端口n输出

在这里插入图片描述

三、寻址方式

一种情况是由指令寻址下一条指令,指令的寻址
一种是寻址自己的操作数地址

在这里插入图片描述

3.1 指令的寻址

指令寻址就是顺序寻址和跳跃寻址两种方式
顺序寻址:
如果是字节编址,每一条指令四个字节,那么PC就是加4;每条指令八个字节,那么PC就是加8
指令长度可变的话,PC加什么则视情况而定
第三条虽然是转移指令,但是执行到这里还没有执行,因此继续顺序寻址
就算JMP转移到4,那也是转移指令,而不是顺序寻址

在这里插入图片描述

3.2 数据的寻址

3.2.1 立即寻址

形式地址不是真实地址,有效地址才是
在立即寻址的寻址方式中,进行取指令的过程中就取到了这个立即数,在指令执行阶段不需要再次进行访存
执行阶段不访存,但是取指令阶段还是要访存
在这里插入图片描述

3.2.2 直接寻址

直接寻址:有效地址就是形式地址
很难直接修改指令的地址码字段,因此循环不用直接寻址方式
在这里插入图片描述

3.2.3 隐含寻址

隐含寻址只是减少了其中的一个地址码字段,下图中的"A"仍然是进行的直接寻址。只不过第二个操作数被隐藏了
下面举例展示的是隐含寻址的直接寻址情况
在这里插入图片描述

3.2.4 间接寻址

一次间址,会进行两次访存,让A指向EA,然后EA存放着真正操作数的地址
这里可以看到,EA的位数一般比A的位数要大,可以扩大寻址的范围
而且在编写程序的时候,修改EA即可修改指向的操作数,而不用修改指令(不用修改A地址码字段)
在这里插入图片描述
多次间址
第一位规定为间接寻址是否结束的标志位
一个标志位让寻址空间减少一半
在这里插入图片描述
这里子程序末尾是进行的间接寻址 @这个符号就是表示间接寻址
在进行调用的时候需要进入子程序,而保存的断点就是81,又因为间址寻址,所以我们将81存储在A的地址中即(A)=81
这里的A开始保存的是81,后来改为202。
在这里插入图片描述

3.2.5 寄存器(直接)寻址

也可以说,这个叫寄存器直接寻址
缺点是地址范围有限
在这里插入图片描述

3.2.6 寄存器间接寻址

操作数存放在主存中,需要进行一次访存
这样的方式,只需要修改寄存器中的地址即可,很适合编写循环程序
在这里插入图片描述

3.2.7 基址寻址

可以扩大寻址范围:BR的位数一般来说较多,而且通过调整BR的位置就可以扩大寻址的范围
用户不能修改BR的内容,BR内容由操作系统或管理程序确定
BR内容不能改变,可以改变形式地址(意思是在不同指令中,A可以改变,而不是可以直接改A,其实与直接寻址一致!!
主要用于多道程序的设计,来动态修改形式地址,以在内存中进行定位。每个调用的进程的BR寄存器不同,我们的程序在不同的调用情况下都可以运行,类似于动态链接库。
关于这一部分老师的讲解:(超级感谢HIT的老师们,他们真的好认真负责好温柔,我哭死)
在这里插入图片描述
在这里插入图片描述

这里注意,尽管用户可以选择使用哪一个通用寄存器作为基址寄存器,它的内容还是由操作系统决定
在这里插入图片描述

3.2.8 变址寻址

与基址寻址的情况不同,在程序执行过程中,A固定,IX变址寄存器可以进行修改
处理数组问题时,将A作为数组起始地址,IX作为数组的下标,可以方便地完成循环操作
在这里插入图片描述

在这里插入图片描述

3.2.9 相对寻址

相对寻址,有利于程序浮动——程序浮动是指,程序在内存中的存储位置发生变化
通常用于短距离的跳转,A的位数有限,不能跳转很远
在这里插入图片描述
在这里插入图片描述

虽然我们写的汇编指令是*+8,但是编译器会自动将位移量进行修正,左图是编写的时候,右边是编译
但是在实际运行过程中,二字节指令,在运行指令2000H的时候,PC已经更新为2002H,
** 所以在实际存储过程中这个字节是06H而不是汇编里面的08H!!!!**

在这里插入图片描述

3.2.10 堆栈寻址

一般采用硬堆栈方式,用两个或者三个或更多的寄存器作为栈顶,其他栈底仍然在内存当中
一般来说,栈顶的地址低,栈底地址高,向下是地址增加的方向
减几看的是压栈和弹栈时候的元素占的是几个编址单位
在这里插入图片描述
按照字节还是按照字编址是不一样的,需要注意!!!-1往往是按字编址的情况
在这里插入图片描述

3.3 基本寻址方式及其优缺点总结

堆栈只能按顺序存取
在这里插入图片描述

四、指令格式举例

4.1 直接寻址与变址寻址例子

数组累加,变址寻址用的指令更少,节省空间
在这里插入图片描述

4.2 相对寻址例子

相对寻址的方式
若程序在内存中的存储位置发生了变化,相对位移就不需要像变址寻址改变物理地址
在这里插入图片描述

4.3 堆栈寻址例子

在这里插入图片描述

4.4 指令格式举例

兼容性一般值得是向上兼容,新一代CPU一定要实现老一代CPU的指令
在这里插入图片描述

4.4.1 IBM 360(老师PPT没有,不考)

IBM 360 指令地操作码位数都是8位
X:变址寄存器
B:基址寄存器
D:偏移地址
L:指出内存到内存的数据传送长度
在这里插入图片描述

4.4.2 Intel 8086

从指令字长来说,8086是典型的复杂指令集计算机
端间调用需要另外两个字节存储段号,段内则不需要段号,只需要三个字节
在这里插入图片描述

4.4.3 MIPS指令格式

在这里插入图片描述

4.4.4 32位ARM指令集和16位Thumb指令集

ARM指令集效率高但是相同功能编译后的编码空间大,代码密度低
对于无缝切换:只需要判断转移的目标是32倍数还是16的倍数,对应不同的指令集
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.4.5 三种举例格式的对比

在这里插入图片描述

4.5 指令系统习题

在这里插入图片描述
假设:
I为0的时候直接寻址
I为1的时候间接寻址
首先注意题目中的“主存可直接或间接寻址”,这表明指令格式中应该有标志位来支持选择直接还是间接寻址
这里把间接还是直接的标志位放在形式地址的前面,是因为它在判断主存寻址时是直接还是间接寻址,所以放在主存地址前
这里的指令寻址, 认为是以字为单位寻址 (这里我有些疑惑,留个坑,等开学学到这里时候问问老师,我感觉还是可以以字节位单位寻址的)
在这里插入图片描述
这里增加了寻址特征位B,当B等于1的时候,那么就是以目标寄存器 B R i BR_i BRi作为基址寄存器进行基址寻址
如果是普通的变址寻址则不需要 B R i BR_i BRi,但是注意题目是给的通用寄存器作基址寄存器,要加一个寄存器编号
这里在计算寻址的最大空间时,要注意 B R i BR_i BRi与A相加后,仍为32位
在这里插入图片描述

五、RISC与CISC技术

5.1 RISC技术

早期计算机采用的一般是CISC
在这里插入图片描述
指令集比较小,指令少,让CPU的控制器设计十分简单,指令格式种类少,译码简单
因为只有LOAD和STORE可以进行指令访存,其他的指令大多只用寄存器,因此为支持其他指令的执行,CPU中有多个通用寄存器
RISC技术的指令组合并不复杂,处理器使用流水线技术·
组合逻辑实现控制器,速度更快

主要特征还有可以通过优化编译的方式生成高效的目的代码
在这里插入图片描述

5.2 CISC技术

指令长度不固定、指令格式种类多。寻址方式多,这让译码电路更为复杂
访存指令不受限制,普通指令也可以访存
专用寄存器:8086的变址寄存器、基址寄存器
一般复杂指令是采用多个微指令按顺序完成,用微程序的方式完成,而微程序保存在控制存储器中。
需要微程序控制器,多次访问控制存储器,速度慢

多个时钟周期是在等待访存完成
主要特征还有难以用优化编译生成高效的目的代码

在这里插入图片描述

5.3 RISC与CISC的比较

因为CISC技术需要微程序控制器,占用CPU芯片面积大;相对于次,RISC的占用CPU芯片面积小
RISC不容易实现指令系统的兼容,指令格式紧凑,后续增加指令难

比较添加一点,有利于便于程序代码的优化
RISC换一个体系结构的机器一般需要重新编译

在这里插入图片描述

5.4 课堂小题

RISC 39种操作,这个意思是操作码字段是6位,五位不够用
因为支持四种寻址方式,所以寻址方式对应两位,
单地址格式说明只有一个地址,所以形式地址A的位数是8
可以得到指令格式

直接寻址是 2 8 2^{8} 28或者 0   2 8 − 1 0~2^{8}-1 0 281
一次间接是 2 16 2^{16} 216或者 0   2 16 − 1 0~2^{16}-1 0 2161
多次间接是 2 15 2^{15} 215或者 0   2 15 − 1 0~2^{15}-1 0 2151

立即数是 − 2 7 -2^{7} 27 2 7 − 1 2^{7}-1 271
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值