指令系统
大家好呀!我是小笙,本章我主要分享计算机组成原理的指令系统知识,希望内容对你有所帮助!
指令系统
指令的概述
指令的格式
![image-20240322124839520](https://i-blog.csdnimg.cn/blog_migrate/0eaa18f1bc056986c5f3923757c4080c.png)
-
操作码:反映机器做什么操作
-
长度固定:将操作码集中放在指令字的一个字段内(用于指令字段较长的情况。例如: IBM370)
-
长度可变:操作码分散在指令字的不同字段中(有效地压缩操作码的平均长度,在字长较短的微型计算机中被广泛采用。例如:PDP-11)
-
扩展操作码技术:操作码的位数随地址数的减少而增加
-
-
地址码:地址码用来指出该指令的源操作数的地址(一个或两个)、结果的地址以及下一条指令的地址
分类:四地址指令、三地址指令、二地址指令、一地址指令、零地址指令
指令的字长取决于
- 操作码的长度
- 操作数地址的长度
- 操作数地址的个数
指令字长可以分为固定和可变:固定的时候,指令字长 = 存储字长 ; 可变的时候,按字节的整数倍数变化
操作数类型和操作种类
操作数的类型
- 地址:无符号整数
- 数字:定点数、浮点数、十进制数
- 字符:ASCII
- 逻辑数:逻辑运算
数据在存储器中的存放方式
-
不对准边界(从任意位置开始访问)
优点:不浪费存储资源
缺点:除了访问每个字节之外,访问其他任何类型的数据都可能花费两个存储周期的时间;读写控制比较复杂
-
对准边界(从一个存储字的起始位置开始访问)
优点:无论访问任何类型的数据,在一个周期均可完成;读写控制简单
缺点:浪费了宝贵的存储资源
-
边界对转方式(从地址的整数倍位置开始访问)
数据存放的起始位置是数据长度的整数倍(前面两种方式的折中方案)
操作类型
- 数据传送:数据传送包括寄存器与寄存器、寄存器与存储单元、存储单元与存储单元之间的传送
- 算术逻辑操作:算术运算和逻辑运算
- 移位操作:分为算术移位、逻辑移位和循环移位
- 转移:跳转、无条件/条件转移等
- 输入输出:从外设中的寄存器读入一个数据到 CPU 的寄存器内,或将数据从 CPU 的寄存器输出至某外设的寄存器中
寻址方式
寻址方式:确定本条指令的数据地址以及下一条将要执行的指令地址的方法
寻址方式分为指令寻址和数据寻址两大类
指令寻址
- 顺序寻址可通过程序计数器PC加1,自动形成下一条指令的地址
- 跳跃寻址则通过转移类指令实现
![image-20240326124133642](https://i-blog.csdnimg.cn/blog_migrate/a65ed24c43323db25300422e0d3c87b9.png)
数据寻址
指令的地址码字段通常都不代表操作数的真实地址
- 形式地址:指令中的地址(可以理解为逻辑地址)
- 有效地址:操作数的真实地址
以下寻址方式建立在 指令字长 = 存储字长 = 机器字长
立即寻址
操作数本身设在指令字内,即形式地址 A 不是操作数的地址,而是操作数本身,又称之为立即数(数据是采用补码形式存放的)
![image-20240326124901358](https://i-blog.csdnimg.cn/blog_migrate/25539521583e4dca051e928defc17332.png)
优点:只要取出指令,便可立即获得操作数,这种指令在执行阶段不必再访问存储器
缺点:显然 A 的位数限制了这类指令所能表述的立即数的范围
直接寻址
EA = A 有效地址由形式地址直接给出
![image-20240326125244468](https://i-blog.csdnimg.cn/blog_migrate/89455aae736a0a89815102cfc63e1b5c.png)
优点:寻找操作数比较简单,也不需要专门计算操作数的地址,在指令执行阶段对主存只访问一次
缺点:A 的位数限制了操作数的寻址范围,而且必须修改A的值,才能修改操作数的地址
隐含寻址
指令字中不明显地给出操作数的地址,其操作数的地址隐含在操作码或某个寄存器中
![image-20240326125334507](https://i-blog.csdnimg.cn/blog_migrate/2897efc426bffab66fdbd212fcb95e38.png)
由于隐含寻址在指令字中少了一个地址,因此,这种寻址方式的指令有利于缩短指令字长
间接寻址
倘若指令字中的形式地址不直接指出操作数的地址,而是指出操作数有效地址所在的存储单元地址,也就是说,有效地址是由形式地址间接提供的,即为间接寻址,即EA=(A)
![image-20240326125446727](https://i-blog.csdnimg.cn/blog_migrate/03859b123ca44889a4acb06e38c375cc.png)
优点:它扩大了操作数的寻址范围以及便于编程
缺点:在于指令的执行阶段需要访存两次(一次间接寻址)或多次(多次间接寻址),致使指令执行时间延长
![](https://i-blog.csdnimg.cn/blog_migrate/19990c4c52fdf9d2f42033b15bdc9064.png)
寄存器寻址
在寄存器寻址的指令字中,地址码字段直接指出了寄存器的编号,即EA=Ri
![image-20240327124227915](https://i-blog.csdnimg.cn/blog_migrate/624cc8149e0734a3888bccebf60038c4.png)
优点
- 操作数不在主存中,故寄存器寻址在指令执行阶段,无须访存,减少了执行时间
- 地址字段只需指明寄存器编号(计算机中寄存器数有限),故指令字较短,节省了存储空间
寄存器间接寻址
Ri 中的内容不是操作数,而是操作数所在主存单元的地址号,即有效地址EA=(Ri)(有效地址不是存放在存储单元中,而是存放在寄存器中)
![image-20240327124329884](https://i-blog.csdnimg.cn/blog_migrate/84efabfa737f548a05f8dccf99a25295.png)
基址寻址
基址寻址需设有基址寄存器 BR,其操作数的有效地址EA等于指令字中的形式地址与基址寄存器中的内容(称为基地址)相加,即 EA = A + (BR)
- 隐式:计算机内部专门设置一个基址寄存器 BR,使用时用户不必明显指出该基址寄存器
- 显式:一组通用的寄存器里,由用户来明确指出哪个寄存器用作基址寄存器
![image-20240327124532788](https://i-blog.csdnimg.cn/blog_migrate/9ce2dd2499be29c9f702a0df0fe0df5e.png)
优点
- 基址寻址可以扩大操作数的寻址范围
- 基址寻址在多道程序中极为有用
- 用户也不可以修改基址寄存器的内容,确保系统安全可靠地运行
变址寻址
变址寻址与基址寻址极为相似。其有效地址EA等于指令字中的形式地址A与变址寄存器 X的内容相加之和,即 EA = A +(IX)
变址寻址主要用于处理数组问题,在数组处理过程中,可设定A为数组的首地址,不断改变变址寄存器X的内容,便可很容易形成数组中任一数据的地址,特别适合编制循环程序
![image-20240327125011238](https://i-blog.csdnimg.cn/blog_migrate/0d796817fce75168ce849dded8b72c1e.png)
优点
- 只要变址寄存器位数足够,也可扩大操作数的寻址范围
- IX 的内容由用户给定
- 在程序执行过程中 IX 内容可变,形式地址A是不可变的
- 便于处理数组问题
堆栈寻址
堆栈分为硬堆栈(多个寄存器)、软堆栈(指定的存储空间)
堆栈寻址就其本质也可视为寄存器间接寻址,因SP可视为寄存器,它存放着操作数的有效地址
![image-20240327125542646](https://i-blog.csdnimg.cn/blog_migrate/70c61ee634893ab04ba25f3f5741cbb5.png)
RISC 和 CISC 技术
RISC 即精简指令系统计算机
主要特征:
- 选用使用频率较高的一些简单指令;复杂指令的功能由简单指令来组合实现
- 指令长度固定、指令格式种类少、寻址方式少
- 只有 LOAD/STORE 指令访存
- CPU 中有多个通用寄存器
- 采用流水技术,一个时钟周期内完成一条指令
- 采用组合逻辑实现控制器
CISC 即复杂指令系统计算机
主要特征:
- 系统指令复杂庞大,各种指令使用频度相差大
- 指令长度不固定、指令格式种类多、寻址方式多
- 访存指令不受限制
- CPU 中设有专有寄存器
- 大多数指令需要多个时钟周期执行完毕
- 采用微程序控制器
RISC 和 CISC 的比较
CISC | RISC | |
---|---|---|
指令系统 | 复杂,庞大 | 简单,精简 |
指令数目 | 大于200条 | 小于100条 |
指令字长 | 不固定 | 定长 |
可访存指令 | 不加限制 | 只有Load/Store指令 |
控制方式 | 绝大多数为微程序 | 绝大多数用组合逻辑 |
通用寄存器数量 | 较少 | 多 |