计组笔记:第五章-指令系统
指令是硬件和软件的中间层。指令系统的设计主要包括指令功能和指令格式的设计。它的评价指标有四点:完备(不能缺少功能)、高效(省地方一点)、规整(格式简单一点)、兼容性(向后兼容,无成本迁移)四方面。
指令的基本格式
主要是两部分,首先是操作码,其次是数个地址(0个或多个)。将二进制编码用助记符表示,就是汇编语言。
计算机的存储方式有大端存储(从数据的高字节开始存)、小端存储(从数据的低字节开始存)
此外还有边界对齐的概念。如图所示:
还有一种存储模式,堆栈。这里的堆栈应该就是栈,堆和栈是俩不一样的东西,堆是存程序malloc的内存的,栈是存程序函数调用开销的,这俩在程序的内存中存储的位置也不一样。
存储模式也有两类:冯诺依曼结构(程序和数据等价)、哈佛结构(程序和数据不对等)。后者对于流水线结构有优化,能达到流水线的理想性能。现在的芯片内部Cache有的会使用哈佛结构:数据Cache、指令Cache,而外部使用冯诺依曼结构。
指令的典型分类
- 数据传送类:频率最高,要快
- 算数运算类
- 逻辑运算类
- 程序控制类
- 转移
- 循环
- 过程调用、返回指令
- 程序自中断指令
- 系统控制类:特权指令,虚存管理、任务切换、改变处理器工作模式
- 数据转换类:可选
- 输入输出类:根据统一编址(把接口的寄存器映射到主存,用数据传输指令访问外设)和独立编址,可能没有专门的输入输出指令。
寻址方式:指令获取操作数的方式
- 隐含寻址:例如Intel指令
MUL BL
,事先规定好了地址在哪 - 立即寻址:
- 寄存器寻址:
- 直接寻址:
- 间接寻址:操作数地址的地址,需要访问两次主存,比较慢
- 寄存器间接寻址:把上面的地址放在CPU内部寄存器
- 基址寻址:用来实现主存分段
- 变址寻址:用来实现数组遍历
- PC相对寻址:PC指向下一条指令,这个方式给PC加偏移量,所以能用来实现与地址无关的程序设计
例如,x86处理器的条件转移指令就是一种PC相对寻址。
无关位置的程序实现:
- 虚存管理:逻辑地址
- 内存分段管理:段内偏移
上面两种方案的缺点是位数多,占用指令存储空间大。
指令长度设计
- 一般原则
- 指令长度为存储器最小可寻址单位的整数倍:(CISC)(x86)
- 指令长度一般为总线宽度的整数倍:RISC
- 常用设计方案
- 变长操作码,变长指令码:CISC(x86)
- 定长操作码,定长指令码:RISC
- MIPS,6位定长操作码,32位定长指令码
- RISC-V,7位定长操作码,32位定长指令码
操作码格式分为定长、变长操作码,变长操作码为了防止重复指令,得用赫夫曼编码来编制操作码。
- 定长操作码
对于定长操作码,可以将指令从高频到低频排序,依次给从0开始编号。
- 优点:操作码构造简单,硬件设计简单,译码速度快
- 缺点:操作码占存储空间大,难以扩展
- 变长操作码
对于变长操作码,按照频率高到低排序,再构造霍夫曼树作为编码结果。
变长操作码设计原则:
- 若指令字长度固定,则长地址码对应短操作码,操作码长度随地址码长度缩短而增加
- 如果指令字长度可变,则以指令使用频率为设计依据,高频短码,低频长码
- 设计总是从短码开始,并且保证现在的操作码和以后扩展的编码能区分
- 短码不能是长码的前缀
根据赫夫曼编码的合并方式不同,得到的结果可能不唯一,但是平均码长一定是唯一的
缺点:编码长度种类过多,电路设计困难
- 扩展操作码
是将赫夫曼编码的码长变为更少的种类。
可以看到,它编码种类较少的同时,码长也很接近赫夫曼编码。因此实际设计时,一般使用这种设计方式。比如CISC的x86就可以这么设计。
上面是两种设计方式。一个长度的指令码必须保留一种组合给更长的指令码做前缀。
因此,上面的操作码可以设计如下:
- 三地址:操作码6位,指令数$n_3\leq2^6-1$
- 双地址:操作码11位,指令数$n_2\leq(2^6-n_3)\cdot2^5-1$
- 单地址:操作码16位,指令数$n_1\leq((2^6-n_3)\cdot2^5-n_2)\cdot2^5-1$
- 零地址:操作码32位,指令数$n_0\leq(((2^6-n_3)\cdot 2^5 - n_2)\cdot2^5-n_1)\times2^{16}$
对于上面的问题,相当于计算单地址指令一共有多少个。我们分析如下:
由上图的不等式能解出来,B类指令最多一共有254条。
上题还是从短码开始考虑。首先短码有m条,则剩下的前缀有$2^4-m$个。再乘以长码扩展的长度$2^6$,就能得到长码最多的个数。
5.6.典型指令系统
Intel x86
发展:从诞生时的80条指令增长到2015的3600条指令(来源Intel博客)。
十分复杂,指令集手册5000多页(
目前在向着RISC的方向均衡。它十分适合高性能计算。
MIPS
ARM手册也长,8000多页(
32位MIPS
64位MIPS,14种指令格式
MIPS是arm流行之前,最流行的处理器。
这一章基本就是这样了。