指令系统结构分类
按照存储分类
- 堆栈结构
- 累加器结构
- 通用寄存器结构:根据操作数来源分为RM,RR (R寄存器,M存储器)
对于不同结构操作数位置和给出方式会不同。
- 显式给出:例如mov
- 隐式给出:例如push,pop
通用寄存器型结构
现代指令系统主流结构。
根据ALU指令操作数个数可以分为:
- 3操作数指令
- 2操作数指令
指令结构类型 | 优点 | 缺点 |
---|---|---|
RR | 字长固定,结构简洁 | 指令条数多,程序占用空间大 |
RM | 不必load加载,易于编码 | 从R和M中读取时间差异大 |
MM | 代码最紧凑,不需要寄存器保存变量 | 指令字长变化大,速度慢 |
寻址方式
寻找有效地址EA
表达方式:
- 寄存器寻址ADD R1,R2
- 立即数寻址ADD R1,#6
- 偏移寻址ADD R1,120(R2)
- 寄存器间接寻址ADD R1,(R2)
- 索引寻址ADD R1,(R2+R3)
- 直接寻址ADD R1,(1000)
- 存储器间接寻址ADD R2,@(R1)
- 自增寻址ADD R1,(R2)+ //R2会自增
- 自减寻址ADD R1,-(R2)
- 缩放寻址ADD R1,80(R2)[R3]
不同寻址方式使用频率不同
最高为立即数寻址和偏移寻址
物理空间的信息存放问题:
如果使用左侧则会降低读入效率,右侧浪费存储空间。
指令系统的设计与优化
指令系统的设计
功能设计,格式设计。
指令系统的设计需要考虑速度,成本,灵活性
指令系统的基本要求
- 完整性:提供的指令对于程序而言足够
- 规整性:每种操作要对所有数据类型都兼容
- 正交性:不同含义字段互不相干,互相独立
- 高效率:速度快
- 兼容性:向后兼容
控制指令
包括:跳转,分支。
对于控制指令而言,分支指令最为常用。
分支条件的方法:
优化
哈夫曼编码
使用频率最高的用最短的编码。
构造方式:哈夫曼树
缺点:变长,难以处理。
改进:使用几种固定长度的编码,但是也是概率高的用短的。
操作码优化程度的判定
信息熵:
信息冗余计算=(实际平均编码长度-理论最短平均长度)/实际平均编码长度 *100%
等长扩展码
15/15/15编码 每一轮的1111作为扩展位
8/64/512编码 每四位选第一为做扩展位
定长操作码:目前常用
优点:编译速度快
缺点:存储空间占用大
编码格式
- 可变长度编码格式:
- 固定长度编码:操作码和寻址方式放到一起,大部分RISC使用
- 混合型编码格式:类似哈夫曼改进。
指令系统的发展和改进
CISC方向
指令数量多,功能多。
改进方向:
- 面向目标程序增强指令功能:增强处理速度,I/O,控制
- 面向高级语言优化
- 面向操作系统优化:进程同步互斥信号量。
RISC方向
只对常用指令编码。
指令定长,指令条数少。
操作数的类型和大小
表示操作数的方法
- 给指令操作码制定的操作数
- 给数据加上表示,数据本身给出操作类型。
操作数大小
字节,半字,字,双字
操作数表示
字符:ASCII
整数:二进制补码
浮点:IEEE 754
MIPS指令系统结构
MIPS寄存器:
- 32个64位通用寄存器
- 32个64位浮点数寄存器
- 特殊寄存器,如溢出
数据表示:
字节8b半字16b字32b双子64b
存储方式:
大端存储:低地址放高位,高地址放地位
MIPS指令格式分类:
- I类指令(立即跳转),如load,store,立即数,分支,寄存器跳转
- R类指令(Register)
- J类指令(Jump)
Q.E.D.