指令系统实现与分类
指令(又称机器指令)是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。一台计算机的所有指令的集合构成该机的指令系统,也称指令集。指令系统是计算机系统结构的主要属性,位于硬件和软件的交界面上。
指令系统
2.1 数据表示及数据结构的比较
- 数据表示:数据表示是指计算机硬件能够直接识别,可以被指令系统直接调用的那些数据类型。
如:定点、逻辑、浮点、十进制、字符、字符串、堆栈和向量 - 数据结构:由软件编程实现,不能被硬件直接识别,指令不能直接调用的数据类型。
如:文件、图、表、树、阵列、队列、链表;
说明:数据表示速度快,成本高,不灵活;数据结构速度慢,成本高,灵活。最基本的、用得多的用硬件实现。
确定哪些数据类型用数据表示实现,是软件与硬件的取舍问题。
确定数据表示的原则:
-
缩短程序的运行时间
-
减少CPU与主存储器之间的通信量
-
这种数据表示的通用性和利用率
2.2 常用的编址单位
常用的编址单位:字编址、字节编址、位编址、块编址等。其中"Cache-主存"系统之间是按块编址,"Cache-CPU"系统之间是按字节、字编址。
2.3 零地址空间个数的选择
- 三个零地址空间:通用寄存器、主存储器、输入输出设备独立编址
- 两个零地址空间:主存储器与输入输出设备统一编址
- 一个零地址空间:所有存储设备统一编址。最低端是通用寄存器,最高端是输入输出设备,中间为主存储器
- 隐含编址方式,实际上没有零地址空间:堆栈、Cache等
2.4 间接寻址方式与变址寻址方式的比较
- 目的相同:都是为了解决操作数地址的修改问题;都能做到不改变程序而修改操作数地址。
- 不同:
- 间址寻址方式:间接地址在主存储器中,没有偏移量;变址寻址方式:基地址在变址寄存器中,带有偏移量
- 实现的难易程度:间址寻址方式容易
- 指令的执行速度:间址寻址方式慢
- 对数组运算的支持:变址寻址方式比较好
2.5 定位方式(操作系统部分)
程序的主存物理地址在什么时间确定?采用什么方式来实现?
- 直接定位方式:在程序装入主存储器之前,程序中的指令和数据的主存物理就已经确定了的称为直接定位方式。
- 静态定位:在程序装入主存储器的过程中随即进行地址变换,确定指令和数据的主存物理地址的称为静态定位方式。
- 动态定位:在程序执行过程中,当访问到相应的指令或数据时才进行地址变换,确定指令和数据的主存物理地址的称为动态定位方式。
2.6 指令格式优化的标准
- 节省程序的存储空间;
- 指令格式尽量规整,便于译码;
2.7 操作码编码的比较(设计题)
操作码的三种编码方法:
- 定长操作码
- Huffman编码
- 扩展操作码
改进操作码编码方式能够节省程序存储空间.
定长操作码:在指令字的最高位部分分配固定长度的若干位(定长)表示操作码。
- 一般n为操作码字段的指令系统最大能够表示2^n条指令。
- 优点:定长操作码对于简化计算机硬件设计,提高指令译码和识别速度很有利。
- 缺点:指令数量增加时会占用更多固定位,留给表示操作数地址的位数受限。
Huffman编码法
思路:短编码表示程序中出现概率大的指令,长编码表示概率小的指令。
实现方法:将所有指令的概率作为叶节点,选择最小概率的两个节点合并为一个,然后将合并的节点与剩余节点一起组成节点集,重复上述步骤,得一棵树。从根节点出发,每个节点有两个分支,可用一位二进制数表示,这样,概率大的指令,从根节点出发经过的路径短,编码短,反之,概率小指令对应的编码长。
- 缺点:操作码长度很不规整,硬件译码困难;与地址码共同组成固定长的指令比较困难。
扩展操作码(不定长操作码):全部指令的操作码字段位数不固定,且分散地放在指令字的不同位置上。
- 最常见的变长操作码方法是扩展操作码,使操作码的长度随地址码的减少而增加,不同地址数的指令可以具有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长。
- 优点:在指令字长有限的前提下仍保持比较丰富的指令种类;
- 缺点:增加了指令译码和分析的难度,使控制器的设计复杂化。
例1:假设一台模型计算机共有7种不同的操作码,如果采用固定长操作码需要3位。已知各种操作码在程序中出现的概率如下表,计算采用Huffman编码法的操作码平均长度,并计算固定长操作码和Huffman操作码的信息冗余量。
指令序号 | I1 | I2 | I3 | I4 | I5 | I6 | I7 |
---|---|---|---|---|---|---|---|
概率 | 0.45 | 0.3 | 0.15 | 0.05 | 0.03 | 0.01 | 0.01 |
指令序号 | I1 | I2 | I3 | I4 | I5 | I6 | I7 |
---|---|---|---|---|---|---|---|
编码 | 0 | 10 | 110 | 1110 | 11110 | 111110 | 111111 |
一台实验计算机的指令字长为16位,有双地址指令、单地址指令和零地址指令三类,并假设每个地址字段长度为6位。
(1)双地址指令有15条,单地址指令和零地址指令相等,三种指令各多少条,其操作码如何分配?
(2)如果三类指令的比例为1:9:9,三种指令各多少条,其操作码如何分配?
(1)指令分配:(其中地址字段为6位)
双地址指令:0000-1110 A1 A2 15条
其中,高4位 1111 用于扩展编码
单地址指令:1111 000000-111110 A 63条
零地址指令:1111 111111 000000-111111 64条
其中单地址指令与零地址指令相等,所以可以将全1的零地址指令去掉。
(2)0000——1101 A1 A2
1110000000——1111111101 A
11111111110000000-1111111111111111
三种指令分别为14条、126和128条。
2.8 常用的地址码个数
地址码个数通常有3个、2个、1个以及0个等四种情况
地址数目 | 操作码长度 | 程序存储量 | 程序执行速度 | 应用场合 |
---|---|---|---|---|
三地址 | 短 | 最大 | 一般 | 向量,矩阵运算为主 |
二地址 | 一般 | 很大 | 很低 | 一般不宜采用 |
一地址 | 较长 | 较大 | 较快 | 连续运算,硬件结构简单 |
零地址 | 最长 | 最小 | 最低 | 嵌套,递归,变量较多 |
二地址R型 | 一般 | 最小 | 最快 | 多累加器,数据传送较多 |
根据指令中操作数地址码的数目不同,可以将指令分成以下几种格式:
1. 零地址指令
零地址: op
只给出操作码OP,没有显式地址。这种指令由两种可能:
1)不需要操作数的指令,比如空操作指令、停机指令、关中断指令等。
2)零地址的运算类指令仅用在堆栈计算机中。通常参与运算的两个操作数隐含地从栈顶和次栈顶弹出,送到运算器进行运算,运算结果再隐含地压入堆栈。
2. 一地址指令
一地址: op A1
这种指令也有两种常见的形态,要根据操作码的含义确定究竟是哪种。
1)只有目的操作数的单操作数指令,按A1地址读取操作数,进行OP操作后,结果存回原地址。
指令含义: OP(AI)+A2
如操作码含义是加1、减1、求反、求补等。
2)隐含约定目的地址的双操作数指令,按指令地址A可读取源操作数,指令可隐含约定另一个操作数由 ACC (累加器)提供,运算结果也将存放在ACC中。
指令含义: (ACC)OP(A1) → ACC
若指令字长为32位,操作码占8位,1个地址码字段占24位,则指令操作数的直接寻址范围为2^24 = 16M。
3. 二地址指令
二地址:op A1 A2
指令含义: (A)OP(A2) → A1
对于常用的算术和逻辑运算指令,往往要求使用两个操作数,需分别给出目的操作数和源操作数的地址,其中目的操作数地址还用于保存本次的运算结果。
若指令字长为32位,操作码占8位,两个地址码字段各占12位,则指令操作数的直接寻址范围为2^12= 4K。
4. 三地址指令
三地址: OP A1 A2 A3(结果)
指令含义: (A)OP(A2) → A3
若指令字长为32位,操作码占8位,3个地址码字段各占8位,则指令操作数的直接寻址范围为2^8 = 256.若地址字段均为主存地址,则完成一条三地址需要4次访问存储器(取指令1次,取两个操作数2次,存放结果1次)。
缩短地址码长度的方法
- 目标:用一个短的地址码表示一个大的逻辑地址空间;
- 用间址寻址方式缩短地址码长度: 在主存储器的低端开辟一个专门存放地址区域;
- 用变址寻址方式缩短地址码长度:由于程序的局部性,变址寻址方式中的地址偏移量比较短;
- 用寄存器间接寻址方式缩短地址码长度,很有效的方法。例如,16个间址寄存器,用4位地址码就能表示任意长的逻辑地址用来支持间接寻址的寄存器,可以借用通用寄存器。
2.9 指令格式的设计
指令的长度:有固定长度和可变长度两种;操作码长度也有固定操作码和可变操作码两种。(注意扩展操作码技术)
指令系统朝两个截然不同的方向发展:一是增强原有指令的功能,设置更为复杂的新指令实现软件功能的硬化,这类机器称为复杂指令系统计算机(CISC)。二是减少指令种类和简化指令功能,提高指令的执行速度,这类机器称为精简指令系统计算机(RISC).
2.10 CISC及其实现方法
- 定义:增强指令功能,设置功能复杂的指令,把原来由软件实现的、常用的功能改用硬件的指令系统来实现。
- 三种方法:
- 目标程序的优化:对目标程序统计分析,对使用频率高的指令用硬件加快其执行,对频率高的指令串用一条指令实现。
- 对高级语言和编译程序的优化:增强对高级语言和编译程序支持指令的功能。
- 操作系统的优化
2.11 RISC及其特点
- 单周期指令;是R型指令;采用硬布线逻辑实现;采用Load/Store结构;有利于编译程序代码优化。
2.12 20%与80%规律及在系统结构中的应用
CISC中,大约20%的指令占据了80%的处理机时间。各种指令的使用频率相差悬殊,大概只有20%的比较简单的指令被反复使用,约占整个程序的80%;而80%左右的指令则很少使用,约占整个程序的20%。
2.13 RISC的关键技术及其实现方法
- 关键技术:
- 延时转移技术:为了使指令流水线不断流,在转移指令之后插入一条不相关的有效的指令,而转移指令被延迟执行,这种技术称为延迟转移技术。
- 指令取消技术:采用指令延时技术,经常找不到可以用来调整的指令,这时采用向后转移(循环程序)、向前转移(IF THEN )、隐含转移技术(用于特殊的IF…THEN…结构中,THEN部分只有一条指令)。
- 重叠寄存器窗口技术:设置一个数量比较大的寄存器堆,并把它划分成很多个窗口。在每个
过程使用的几个窗口中有一个窗口是与前一个过程共用,还有个窗口是与下一个过程共用。 - 指令流调整技术:通过变量重新命名消除数据相关,提高流水线效率。
- 以硬件为主固件为辅:以硬联逻辑为主来实现指令系统对于复杂指令,也微程序技术实现。
- 减少CPI是RISC思想的精华