指令集体系结构的分类
最主要的区别:CPU用来存储操作数的存储单元类型
-
堆栈:堆栈结构
-
累加器:累加器结构
-
通用寄存器:通用寄存器结构(主流结构)
- 寄存器-寄存器型(RR) / load-store结构
- 寄存器-存储器型(RM)
- 存储器存储器型(MM)
根据操作数特征细分:
ALU指令中存储器操作数的个数 | ALU指令中操作数的最多个数 | 结构类型 | 实例 |
---|---|---|---|
0 | 3 | RR | MIPS |
1 | 2 | RM | x86 |
2 | 2 | MM | VAX |
3 | 3 | MM | VAX |
存储器寻址
- 最常用的是较小立即数(有时候也会用到较大立即数,如地址计算)
- 指令集结构设计中,至少要将立即数大小设置为8~16位
操作数的类型与大小
由指令中的操作码指定操作数的类型
大小:操作数的位数/字节数(字节8位,半字16位,字32位,双字64位)
类型:字符(ASCII码表示,一个字节大小)、整数(用二进制补码表示,大小可以是字节、半字或单字)、浮点操作数(单精度1个字,双精度双字,IEEE 754标准)
十进制操作数类型:
- 压缩十进制或二进制编码十进制
- 非压缩十进制:字符串表示
指令集中的操作
控制流指令
- 跳转
- 分支(占控制流的大部分)
- 过程调用
- 过程返回
指令集编码
变长编码格式(适合寻址方式和操作种类很多时)、定长编码格式(适用于寻址方式和操作类型非常少时)、混合型编码格式
指令设计风格
- 复杂指令集计算机CISC
- 精简指令集计算机RISC
MIPS体系结构
寄存器
-
32个64位通用寄存器(GPRS) R0…R31
-
32个64位浮点数寄存器(FPRS) F0…F31
-
一些特殊寄存器,如浮点状态寄存器
功能定义
数据类型
- 整数
- 浮点数
寻址方式
立即数寻址和偏移量寻址,字段都是16位
指令格式
寻址方式编码到操作码中,所有指令都是32位,操作码占6位,3种指令格式
- I类:load、store
- R类:ALU指令、专用寄存器读/写指令、move指令
- J类:跳转、跳转并链接、自陷指令、异常返回指令
MIPS操作
-
load和store
-
ALU操作
-
分支与跳转
-
J类:跳转、跳转并链接、自陷指令、异常返回指令
[外链图片转存中…(img-7ZhlK6tE-1616121307903)]
MIPS操作
- load和store
- ALU操作
- 分支与跳转
- 浮点操作