2.4 指令系统的功能设计完整性、规整性、高效率和兼容性等
2.4.1 基本指令系统通用计算机系统的5类基本指令数据传送类指令,
( 由如下三个主要因素决定:
(1) 数据存储设备的种类
(2) 数据单位:字、字节、位、数据块等
(3) 采用的寻址方式
( 指令种类(以字为传送单位,不考虑寻址方式等):
通用寄存器(通用寄存器通用寄存器(主存储器通用寄存器(堆栈主存储器(通用寄存器主存储器(主存储器主存储器(堆栈堆栈(通用寄存器堆栈(主存储器
2、运算类指令
( 考虑四个因数的组合:
(1) 操作种类:加、减、乘、除、与、或、非、异或、比较、移位、检索、转换、匹配、清除、置位等
(2) 数据表示:定点、浮点、逻辑、十进制、字符串、定点向量等
(3) 数据长度:字、双字、半字、字节、位、数据块等
(4) 数据存储设备:通用寄存器、主存储器、堆栈等
( 以加法指令为例,一般应设置如下几种:
寄存器-寄存器型的定点单字长加法指令寄存器-寄存器型的定点双字长加法指令寄存器-寄存器型的定点半字加法指令寄存器-寄存器型的字节加法指令寄存器-寄存器型的浮点单字长加法指令寄存器-寄存器型的浮点双字长加法指令寄存器-寄存器型的单字长逻辑加法指令,
寄存器-寄存器型的定点向量加法指令寄存器-寄存器型的浮点向量加法指令
( 对于移位指令,要组合以下三个因素:
(1) 移位方向:左移(L)、右移(R)
(2) 移位种类:算术移位(A)、逻辑移位(L)、循环移位(R)
(3) 移位长度:单字长(S)、双字长(D)
组合起来:3×2×2=12种,因逻辑左移与算术左移相同,
移位指令应该有10种,分别是:
SLAS 单字长算术左移
SRAS 单字长算术右移
SLLS(SRLS) 单字长逻辑左移,或单字长算术左移
SLRS 单字长循环左移
SRRS 单字长循环右移
SLAD 双字长算术左移
SRAD 双字长算术右移
SLLD(SRLD) 双字长逻辑左移,或双字长算术左移
SLRD 双字长循环左移
SRRD 双字长循环右移
( 位操作指令:置位、清位、位测试、找位等
( 字符串指令:比较、查找、匹配、转换等
3、程序控制指令
( 主要包括三类:转移指令、调用和返回指令、循环控制指令转移条件主要有:零(Z)、正负(N)、进位?、溢出(V)及它们的组合
( 主要条件转移指令有:
BEQ 等于零转移
BNEQ 不等于零转移
BLS 小于转移
BGT 大于转移
BLEQ 小于等于转移,或不大于转移
BGEQ 大于等于转移,或不小于转移
BLSU 不带符号小于转移
BGTU 不带符号大于转移
BLEQU 不带符号小于等于转移,或不带符号不大于转移
BGEQU 不带符号大于等于转移,或不带符号不小于转移
BCC 没有进位转移
BCS 有进位转移
BVC 没有溢出转移
BVS 有溢出转移
( 程序调用和返回指令:
CALL 转入子程序
RETURN 从子程序返回本身可以带有条件,
中断控制指令:开中断、关中断、改变屏蔽、中断返回、自陷等
4、输入输出指令
( 主要有:启动、停止、测试、控制设备,数据输入、输出操作等
采用单一的直接寻址方式,
( 在多用户或多任务环境下,输入输出指令属于特权指令
( 也可以不设置输入输出指令输入输出设备与主存储器共用同一个零地址空间
5、处理机控制和调试指令
( 处理机状态切换指令
处理机至少有两个或两个以上状态
( 硬件和软件的调试指令硬件调试指令:钥匙位置、开关状态的读取,
寄存器和主存单元的显示等软件调试指令:断点的设置、跟踪,自陷井指令等
2.4.2 指令系统性能
( 完整性是指应该具备的基本指令种类,
通用计算机的5类基本指令
( 规整性包括对称性和均匀性对称性:所有寄存器头等对待
操作码的设置等都要对称,如:A-B与B-A
均匀性:不同的数据类型、字长、存储设备、操作种类要设置相同的指令
( 高效率:指令的执行速度要快
指令的使用频度要高
各类指令之间要有一定的比例
( 兼容性:在同一系列机内指令系统不变(可以适当增加)
2.4.3 指令系统的优化设计指令系统的优化设计有两个截然相反的方向:
1.复杂指令系统计算机CISC(Complex Instruction Set Computer)
增强指令功能,设置功能复杂的指令
面向目标代码、面向高级语言、面向操作系统
用一条指令代替一串指令
2.精简指令系统计算机RISC(Reduced Instruction Set Computer)
简化指令功能,只保留功能简单的指令
较复杂的功能用子程序来实现
2.5 精简指令系统计算机RISC
2.5.1 从CISC到RISC
2.5.2 RISC的定义与特点
2.5.3 RISC的精华
2.5.4 RISC的关键技术
2.5.5 RISC优化编译技术
2.5.1 从CISC到RISC
( 70年代,指令系统已经非常庞大,指令功能相当复杂。
机 型
(生产年代)
IBM370/168
(1973)
VAX-11
(1978)
iAPX 432
(1982)
Dorado
(1978)
指令种类
208
303
222
270
微程序容量
420K
480K
64K
136K
指令长度
16-48
16-456
6-321
8-24
采用的工艺
ECL MSI
TTL MSI
NMOS VLSI
ECL MSI
指令操作类型
存储器-存储器存储器-寄存器寄存器-寄存器
存储器-存储器存储器-寄存器寄存器-寄存器
面向堆栈存储器-存储器
面向堆栈
Cache容量
64KB
64KB
0
64KB
( 1975年,IBM公司率先组织力量,开始研究指令系统的合理性问题。
1979年研制出世界上第一台采用RISC思想的计算机IBM 801,
1986年,IBM正式推出采用RISC体系结构的工作站IBM RT PC,
CISC指令系统存在的问题:
(1979年,美国加洲伯克利分校David Patterson)
1、20%与80%规律
CISC中,大约20%的指令占据了80%的处理机时间。
Intel 8088处理机指令系统使用频度和执行时间统计
(C语言编译程序和PROLOG解释程序)
使用频度
执行时间
序号
指令
%
累计%
序号
指令
%
累%
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
MOV
PUSH
CMP
JMPcc
ADD
POP
RET
CALL
JUMP
SUB
INC
LES
REPN
IMUL
DEC
XOR
REPNZ
CLD
LOOPcc
TEST
24.85
10.36
10.28
9.03
6.80
4.14
3.92
3.89
2.70
2.43
2.37
1.98
1.92
1.69
1.37
1.13
0.78
0.54
0.52
0.40
24.85
35.21
45.49
54.52
61.32
65.46
69.38
73.27
75.97
78.40
80.77
82.75
84.67
86.36
87.73
88.86
89.64
90.18
90.70
91.10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
IMUL
MOV
PUSH
JMPcc
CMP
CALL
RET
ADD
JMP
LES
POP
DEC
SUB
XOR
INC
LOOPcc
LDS
CMPS
MOVS
JCXZ
19.55
17.44
11.11
10.55
7.80
7.27
4.85
3.27
3.26
2.83
2.61
1.49
1.18
1.04
0.99
0.64
0.64
0.44
0.39
0.37
19.55
36.99
48.10
58.65
66.45
73.72
78.57
81.84
85.10
87.93
90.54
92.03
93.21
94.25
95.24
95.88
96.52
96.96
97.35
97.72
8088处理机的指令种类大约100种。
前11种指令的使用频度,前8种指令的运行时间就已经超过了80%,
前20种(20%)指令的使用频度达到91.1%,运行时间达到97.72%,
其余80%指令的使用频度只有8.9%,只占2.28%的处理机运行时间。
2、VLSI技术的发展引起的问题
( VLSI工艺要求规整性,RISC正好适应了VLSI工艺的要求。
( 主存与控存的速度相当,
简单指令没有必要用微程序实现,
复杂指令用微程序实现与用简单指令组成的子程序实现没有多大区别。
由于VLSI的集成度迅速提高,使得生产单芯片处理机成为可能。
3、软硬件的功能分配问题
( 复杂的指令使指令的执行周期大大加长。
一般CISC处理机的指令平均执行周期都在4以上,有些在10以上,
( 在CISC中,增强指令系统功能,简化了软件,硬件复杂了。
( 1981年,Patterson等人研制了32位的RISC I微处理器。
总共31种指令,3种数据类型,两种寻址方式。
研制周期10个月,比当时最先进的MC68000和Z8002快3至4倍,
( 1983年,又研制了RISC II,
指令种类扩充到39种,单一的变址寻址方式,通用寄存器138个。
2.5.2 RISC的定义与特点
( 卡内基梅隆Carnegie Mellon)大学论述RISC特点:
大多数指令在单周期内完成。
2、LOAD/STORE结构。
3、硬布线控制逻辑。
4、减少指令和寻址方式的种类。
5、固定的指令格式。
6、注重编译优化技术。
( 90年代初,IEEE的Michael Slater对RISC定义的描述:
1、RISC为使流水线高效率执行,应具有下述特征:
(1) 简单而统一格式的指令译码。
(2) 大部分指令可以单周期执行完成。
(3) 只有LOAD和STORE指令可以访问存储器。
(4) 简单的寻址方式。
(5) 采用延迟转移技术
(6) 采用LOAD延迟技术
2、RISC为使优化编译器便于生成优化代码,应具有下述特征:
(1) 三地址指令格式。
(2) 较多的寄存器。
(3) 对称的指令格式。
2.5.3 减少CPI是RISC思想的精华
( 程序执行时间的计算公式:
P=I·CPI·T
其中:P是执行这个程序所使用的总的时间;
I是这个程序所需执行的总的指令条数;
CPI(Cycles Per Instruction)是每条指令执行的平均周期数;
T是一个周期的时间长度。
CISC与RISC的I、CPI和T的比较类 型
指令条数
I
指令平均周期数
CPI
周期时间
T
CISC
1
2~15
33ns~5ns
RISC
1.3~1.4
1.1~1.4
10ns~2ns
( RISC的速度要比CISC快3倍左右,关键是RISC的CPI减小了
( 硬件方面:采用硬布线控制逻辑
减少指令和寻址方式的种类
使用固定的指令格式
采用LOAD/STORE结构
指令执行过程中设置多级流水线等
( 软件方面:十分强调优化编译技术的作用
( RISC设计思想也可以用于CISC中例如:Intel公司的80x86处理机的CPI在不断缩小,
8088的CPI大于20,
80286的CPI大约是5.5,
80386的CPI进一步减小到4左右,
80486的CPI已经接近2,
Pentium处理机的CPI已经与RISC十分接近。
( 目前,超标量、超流水线处理机的CPI已经达到0.5,
实际上用IPC(Instruction Per Cycle)更确切
2.5.4 RISC的关键技术
1、延时转移技术
( 定义:为了使指令流水线不断流,在转移指令之后插入一条有效的指令,而转移指令被延迟执行,这种技术称为延迟转移技术。
采用指令延迟转移技术时,指令序列的调整由编译器自动进行,
1:
2:
3:
n:
ADD R1,R2
JMP NEXT2
NEXT1,SUB R3,R4
………
NEXT2,MOVE R4,A
(a) 一个程序
1:F E
2,F E
3,F E
n,F E
(b) 流水线中指令作废
因转移指令引起的流水线断流
1:
2:
3:
n:
JMP NEXT2
ADD R1,R2
NEXT1,SUB R3,R4
………
NEXT2,MOVE R4,A
(a) 调整后的程序
1:F E
2,F E
n,F E
(b) 指令调整后的流水线
采用延时转移技术的指令流水线
( 采用延迟转移技术的两个限制条件
(1)被移动指令在移动过程中所经过的指令之间不能有数据相关
(2)被移动的指令不破坏条件码,至少不影响后面的指令使用条件码
如果找不到符号条件的指令,必须在条件转移指令后面插入空操作
如果指令的执行过程分为多个流水段,则要插入多条指令调整后的指令序列:
1,MOVE R1,R2
2,CMP R3,R4 ;(R3)与(R4)比较
3,BEQ EXIT ;如果(R3)=(R4)则转移到NEXT
4,ADD R4,R5
………
N:NEXT,MOVE R4,A
调整后的指令序列,
1,CMP R3,R4 ;(R3)与(R4)比较
2,BEQ EXIT ;如果(R3)=(R4)则转移到NEXT
3,MOVE R1,R2 ;插入指令,不能有数据相关,不能改变条件吗
4,ADD R4,R5
………
N,NEXT,MOVE R4,A
2、指令取消技术
原因:采用指令延时技术,在许多情况下找不到可以用来调整的指令分为三种情况:
(1)向后转移(循环程序)
( 实现方法:循环体的第一条指令经调整后安排在两个位置,第一个位置是在循环体的前面,第二个位置安排在循环体的后面,
如果转移成功,则执行循环体后面的指令,然后返回到循环体开始;否则,则取消循环体后面的指令,继续执行后面的指令
( 例子:
LOOP,X X X
Y Y Y
……
Z Z Z
COMP R1,R2,LOOP
W W W
(a) 调整前的程序
X X X
LOOP,Y Y Y
……
Z Z Z
COMP R1,R2,LOOP
X X X
W W W
(b) 调整后的程序
指令取消技术(向后转移)
( 效果:能够使指令流水线在绝大多数情况下不断流,
由于绝大多数情况下,转移是成功的,
(2)向前转移(IF THEN )
( 实现方法:如果转移不成功执行下条指令,否则取消下条指令。
( 例子:
R R R
……,IF”部分的程序代码
S S S
COMP R1,R2,THRU
T T T
……,THEN”部分的程序代码
U U U
THRU,V V V
( 效果:成功与不成功的概率通常各为50%,
(3)隐含转移技术
( 应用场合:用于IF THEN 结构,且THEN部分只有一条指令
( 实现方法:把IF的条件取反,
如果取反后的条件成立则取消下条指令,否则执行下条指令。
( 例子,IF (a<b) THEN b=b+1
COMP >=,Ra,Rb ;若(Ra)>=(Rb)则取消下条指令
INC Rb
3、重叠寄存器窗口技术(Overlapping Register Window)
( 原因:RISC中,子程序比CISC中多
因传送参数而访问存的信息量很大
( 美国加洲大学伯克利分校的F Baskett提出
( 实现方法:设置一个数量比较大的寄存器堆,并把它划分成很多个窗口。在每个过程使用的几个窗口中有一个窗口是与前一个过程共用,还有一个窗口是与下一个过程共用。
( 例子:(在RISC II中采用的方法)
137
132
寄存器重叠
131
122
A局部寄存器
A局部寄存器
121
116
A,B公用寄存器
传送参数
传送参数
寄存器重叠
115
106
B局部寄存器
B局部寄存器
105
100
B,C公用寄存器
传送参数
传送参数
99
90
B局部寄存器
C局部寄存器
89
84
C,D公用寄存器
传送参数
31
26
与上一过程合用
31
26
与上一过程合用
31
26
与上一过程合用
……
25
16
局部寄存器
25
16
局部寄存器
25
16
局部寄存器
10
15
10
与下一过程合用
15
10
与下一过程合用
15
10
与下一过程合用
9
0
全局寄存器
9
0
全局寄存器
9
0
全局寄存器
9
0
全局寄存器
物理寄存器
A过程的寄存器窗口
B过程的寄存器窗口
C过程的寄存器窗口
重叠寄存器窗口技术
( SUN公司的SPARC、SuperSPARC、UtraSPARC处理机,把最后一个过程与第一个过程的公用寄存器重叠起来,形成一个循环圈。
( 效果:可以减少大量的访存操作。
当寄存器溢出时,要在主存中开辟一个堆栈
寄存器窗口技术的效果程序名称
调用次数
最大调用深度
RISC II
溢出次数
RISC II
访存次数
VAX-11
访存次数
Quicksort
111K(0.7%)
10
64
4K(0.8%)
696K(50%)
Puzzle
43K(8.0%)
20
124
8K(1.0%)
444K(28%)
过程调用所需开销的比较机器类型
执行指令条数
执行时间(微秒)
访问存储器次数
VAX-11
PDP-11
MC68000
RISC II
5
19
9
6
26
22
19
2
10
15
12
0.2
Quicksort程序的调用的次数多,深度不大,Puzzle程序正好相反
4、指令流调整技术
( 目标:通过变量重新命名消除数据相关,提高流水线执行效率
( 例子:调整后的指令序列比原指令序列的执行速度快一倍
ADD R1,R2,R3 ;(R1)+(R2)→R3 ADD R1,R2,R3
ADD R3,R4,R5 ;(R3)+(R4)→R5 MUL R6,R7,R0
MUL R6,R7,R3 ;(R6)×(R7)→R3 ADD R3,R4,R5
MUL R3,R8,R9 ;(R3)×(R8)→R9 MUL R0,R8,R9
(a) 调整前的指令序列 (b) 调整后的指令序列
5、以硬件为主固件为辅
( 固件的主要缺点是:执行速度低
主要优点是:便于实现复杂指令,便于修改指令系统
( RISC主要采用硬联逻辑来实现指令系统
对于复杂指令,也微程序技术实现。
2.5.5 RISC优化编译技术
RISC对编译器带来的方便主要有:
1、指令系统比较简单、对称、均匀,指令选择工作简单。
2、选择寻址方式的工作简单,省去了是否生成访问存储器指令的选择工作。
3、用于大多数指令在一个周期内执行完成,为编译器调整指令序列提供了极大的方便。
RISC对编译器造成的困难主要有:
1、必须精心安排每一个寄存器的用法,以便充分发挥每一个通用寄存器的效率,尽量减少访问主存储器的次数。
做数据和控制相关性分析,要调整指令的执行序列,并与硬件相配合实现指令延迟技术和指令取消技术等。
要设计复杂的子程序库,RISC的子程序库通常比CISC的大得多。
本章重点:
1、浮点数的性质和设计方法
2、自定义数据表示方法的原理
3、寻址方式的选择
4、指令格式的优化设计(操作码扩展编码等)
5、RISC思想
6、RISC的关键技术
练习题:
2,3 2.5 2.6 2.10
2.14 2.15 2.18 2.20