
[[CA-NotesView]]
指令系统主要内容
存取方式
Push
/ Pop
堆栈
Load
/ Store
累加器 (1个操作数)
Load
/ Store
寄存器或者存储器 (2/3操作数)
通用寄存器型结构
R-R
R-M
M-M
寻址方式
为了保证访问速度现在的计算机一般都是按整数边界存储信息。
指令系统设计的基本原则
完整性 规整性 正交性 高效率和兼容性
正交性
编码的时候互不相关互相独立
定义: 指令是无条件改变控制流的时候称之为跳转指令,控制指令是有条件改变控制流的时候称之为分支指令。
指令操作码的优化
指的是用最短的位数来表示指令的操作信息和地址信息
哈夫曼树设计思想
选用哪种编码取决于使用频率的分析
当代计算机:RISC 使用定长操作码
沿CISC方向发展和改进指令系统
面向目标程序增强指令性能
增强运算行指令的功能
增强数据传送指令的功能
增强程序控制指令的功能
面向高级语言的优化实现来改进指令系统
面向操作系统的优化实现改进指令系统
处理机工作状态和访问方式的切换
进程的管理和切换
存储管理和信息保护
进程的同步和互斥,信号灯的处理等
沿RISC方向发展和改进指令系统
💡 CISC
出现的问题
指令的使用频度存在悬殊
指令系统庞大,指令条数太多,指令的功能太复杂
占用芯片面积,增加制造成本
增加研制时间和成本,还容易造成设计错误
许多指令因为操作繁杂,使得CPI比较大
由于指令功能复杂,规整性不好,不利于采用流水技术来提高性能
RISC
机器的设计
指令条数少,指令功能简单
采用简单而又统一的指令格式,并减少寻址方式
功能部件流水化,指令的执行能够在单周期完成
采用
load-store
结构,只有这两个指令可以方寸大多数指令都采用硬件逻辑来实现
优化编译器,为高级语言生成高效的代码
充分利用流水技术来提高性能
操作数的类型和大小
表示操作数类型的方法
指定操作数的类型
给数据加上标识
MIPS指令系统结构
寄存器
32个54位寄存器:R0
~ R31
其中保持R0 = 0
32个单精度浮点寄存器:F1
~ F31
存储32位单精度浮点数和64位双精度浮点数
MIPS数据表示
整数:字节 半字 字
浮点数: 单精度浮点数 双精度浮点数
字节或者半字装入的时候使用零扩展的方式来进行
MIPS寻址方式
只提供:立即数寻址和偏移量寻址
间接寻址:当偏移量为0的时候就是寄存器间接寻址
绝对寻址:当使用R0
作为基址的时候就是16位绝对寻址
👿👿 MIPS指令格式
三种指令格式
I类指令
包括 load
store
寄存器-立即数型ALU
指令 分支指令的转移目标地址 寄存器跳转并链接的转移目标地址
R类指令
R类型指令包括寄存器-寄存器型的ALU
指令 专用寄存器读/写指令 move
指令等
func
为具体的运算操作编码
J类指令
这类指令包括跳转指令/跳转并链接指令/自陷指令/异常返回指令。
跳转类型是两个
MIPS浮点操作
用后缀S标识操作数是单精度浮点数,D标识是双精度浮点数
例如 MOVD
MOVS
某机的指令字长为 16 位,设有单地址指令和两地址指令。若每个地址字段均为6 位,且两地址指令有 A 条,问单地址指令最多可以有多少条?
单地址段的设计:由于地址字段为6位,所以功能字段为10位,不考虑两个地址指令,那么单地址指令就有$2^{16-6} = 2 ^{10}$ 条。
两地址段的设计:由于此时只能用四位来作为功能码,由于有A条的两地址指令,所以单地址指令就有:$2^{10} - A \times 2 ^6$ 条。
某处理机的指令系统要求有三地址指令 4 条、单地址指令 255 条、零地址指令16 条。设指令字长为 12 位,每个地址码长度为 3 位。问能否用扩展编码为其操作码编码?如果要求单地址指令为 254 条能否对其操作码扩展编码? 说明理由。
但地址指令是255条,采用扩展编码的话操作码位数就是8位,地址码使用3位,指令字长是12位所以就剩下1位来标识其他类型的操作码,能表示零地址的指令只能表示2条,三地址的指令0条。
- 标题:
- 作者: Molaters
- 创建于 : 2023-11-24 11:30:49
- 更新于 : 2023-11-18 21:17:22
- 链接: https://molaters.github.io/2023/11/24/计算机体系结构/CA-RW-CH2/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。