第5章指令系统
5.1 基本概念
?指令就是要计算机执行某种操作的命令。
?指令系统是一台计算机中所有机器指令的集合。
?系列计算机是指基本指令系统相同,基本体系结构相同的一系列计算机。系列机能解决软件兼容问题的必要条件是该系列的各机种有共同的指令集,而且新推出的机种的指令系统一定包含旧机种的所有指令,因此在旧机种上运行的各种软件可以不加任何修改地在新机种上运行。
5.2 指令格式
? 5.2.1 指令格式
?指令由表示操作性质的操作码和表示操作对象的地址码两部分组成。即:
操作码字段地址码字段
?操作码指出指令中该指令应该执行什么性质的操作和具有何种功能。
?地址码指出该操作数所在的存储器地址或寄存器地址。
?根据指令中的操作数地址码的数目的不同,可将指令分成零地址指令、一地址指令、二地址指令、三地址指令和多地址指令等多种格式。
? (1) 零地址指令格式OP
?指令中只给出操作码,没有显地址。
这种指令有两种可能:
?①不需要操作数的指令。
?②隐含对累加器AC内容进行操作
? (2)一地址指令格式:OP A 其功能:OP(A)→A 或(AC)OP(A1)→AC
?一地址指令有两种常见的形态,根据操作码含义确定它究竟是哪一种。
?①只有目的操作数的单操作数指令
?②隐含约定目的地址双操作数指令
? (3)二地址指令格式:OP A1 A2 其功能:(A1)OP(A2)→A1
? (4)三地址指令格式:OP A1 A2 A3
其功能:(A1)OP(A2)→A3
? (5)多地址指令
?在某些性能较好的大、中型机甚至高档小型机中,往往设置一些功能很强的,用于处理成批数据的指令,如字符串处理指令,向量、矩阵运算指令等。为了描述一批数据,指令中需要多个地址来指出数据存放的首地址、长度和下标等信息。
?注意:采用隐地址(隐含约定)可以简化指令地址结构,即减少指令中的显地址数。
?零地址、一地址和两地址指令具有指令短,执行速度快,硬件实现简单等特点,多为结构较简单,字长较短的小型、微型机所采用;
?两地址、三地址和多地址指令具有功能强,便于编程等特点,多为字长较长的大、中型机所采用。
?指令的地址是由程序计数器(PC)规定的,而数据的地址是由指令规定的。
? 5.2.2 指令操作码的扩展技术
?
?通常在指令字中用一个固定长度的字段来表示基本操作码,而对于一部分不需要某个地址码的指令,把它们的操作码扩充到该地址字段,
这样既能充分地利用指令字的各个字段,又能在不增加指令长度的情况下扩展操作码的长度,
使它能表示更多的指令。
?
?见P131例题
?例5.2 指令字长为12位,每个地址码为3位,采用扩展操作码的方式,设计
4条三地址指令、16条二地址指令、
64条一地址指令和16条零地址指令。
?①画出扩展图
?②画出指令译码逻辑。
?③计算操作码平均长度
?【例题分析】
?每个地址码为3位,三地址占12位,4条三地址指令的操作码为3位,编码为:000~011
?二地址占8位,16条二地址指令的操作码为6位,
编码为:10 0000~10 1111
?一地址占4位,64条一地址指令的操作码为9位,
编码为:110 000000 ~110 111111
? 16条零地址指令的操作码为12位,编码为:
11100000 0000~11100000 1111
答案】
① 操作码的扩展如下,
000 ××× ××× ×××
4条三地址指令
011 ××× ××× ×××
100 000 ××× ×××
16条二地址指令
101 111 ××× ×××
110 000 000 ×××
64条一地址指令
110 111 111 ×××
111 000 000 000
16条零地址指令
111 000 001 111

②指令译码逻辑如图5.1所示。
×
×
×
×××
×××
×××
3:8
译码器
Y
4
Y
5
Y
6
Y
7
4:16
译码器
6:64
译码器
4:16
译码器
4
条三地址指令
16
条二地址指令
64
条一地址指令
16
条零地址指令

5.1

5.2
的指令译码逻辑
译码开始信号
?③操作码平均长度=(4×3 +16×6 +
64×9 +16×12)/(4+16+64+16) =8.7
?
?例5.3 ★某计算机指令长度为32位,有3种指令:
双操作数指令、单操作数指令、无操作数指令。
今采用扩展操作码的方式来设计指令,假设操作数地址为12位,己知有双操作数指令K条,
单操作数指令L条,问无操作数指令有多少条?
?【例题分析】
?对于双操作数指令,操作码长度为(32-
12×2)=8位;
?对于单操作数指令,操作码长度为(32-
12)=20位,可扩展位为20-8=12位;
?对于无操作数指令,操作码长度为32位,
可扩展位为32-20=12位。
?由于双操作数指令有K条,而双操作数最多有
2
8
条,所以留有(2
8
-K)个编码用于扩展到单操作数指令;
?单操作数指令有L条,而单操作数指令最多有
(2
8
-K)×2
12
条,所以留有[(2
8
-K)×2
12
-L]个编码用于扩展到无操作数指令;
?根据以上分析:无操作数指令条数=[(2
8

K)×2
12
-L] ×2
12

? 5.2.3 指令长度与字长的关系
?字长是指计算机能直接处理的二进制数据的位数,它与计算机的功能和用途有很大的关系,
是计算机的一个重要技术指标。字长决定了计算机的运算精度,字长越长,计算机的运算精度越高,为了便于处理字符数据和尽可能地充分利用存储空间,一般机器的字长都是字节长度(即8位)的l,2,4或8倍,也就是8,16,32
或64位。
?
?指令的长度主要取决于操作码的长度、
操作数地址的长度和操作数地址的个数。
由于操作码的长度、操作数地址的长度及指令格式不同,各指令的长度不是固定的,但也不是任意的。为了充分地利用存储空间,指令的长度通常为字节的整数倍。
?指令的长度与机器的字长没有固定的关系,它既可以小于或等于机器的字长,
也可以大于机器的字长。一条指令存放在地址连续的存储单元中,在同一台计算机中可能既有短格式指令又有长格式指令,但通常是把最常用的指令(如算术逻辑运算指令、数据传送指令)设计成短格式指令,以便节省存储空间和提高指令的执行速度。
5.3 数据表示见P132
?目前计算机所用数据字长一般为32位。
存储器的地址,一般按字节表示。计算机的指令系统可支持对字节、半字、字、
双字的运算,有些计算机有位处理指令。
为便于硬件实现,一般要求多字节数据对准边界,如图5.2(a)所示。当所存数据不能满足此要求时,则填充一个至多个空白字节。也有的计算机不要求对准边界,但可能增加访问存储器次数。
?假如存储器与运算部件间数据通路的宽度为32
位(一个字),在不按边界对准的计算机中,访存指令所要求存取的数据(例如一个字),可能在两个存储单元中,因此需要访问两次存储器,
而且还要对高低字节的位置进行调整,图
5.2(b)的阴影部分即属这种情况。在数据对准边界的计算机中,当以二进制来表示地址时,
半字地址的最低位恒为零,字地址的最低两位为零,双字地址的最低三位为零。
5.4 寻址方式
?所谓寻址方式,就是寻找指令或操作数的有效地址的方式。
? 1.指令的寻址方式
?指令寻址的基本方式有两种,一种是顺序寻址方式,
另一种是跳跃寻址方式
? 2.操作数寻址方式
?操作数的寻址方式就是形成操作数有效地址的方法。
?设某计算机具有如下所示的单地址指令结构。其中,
OP为操作码;X为寻址特征码;D为形式地址,或称偏移量。寻址过程就是把X和D的不同组合变换成有效地址的过程。
?例如,一种单地址指令的结构如下所示,
其中X,I,D组成该指令的操作数地址。
操作码变址间址形式地址
OP X I D
?其中:D称为形式地址,也称位移量;
? I为间址特征;
? X为寻址方式特征位;
?寻址过程就是把操作数的形式地址,变换为操作数的有效地址的过程。
? (1)隐含寻址
?指令中隐含着操作数的地址。
? (2)立即寻址
?操作数在指令中,Data=D,这种寻址方式称为立即寻址。立即寻址方式的特点是指令执行时间很短,因为它不需要访问内存取数,从而节省了访问内存的时间。
? (3)直接寻址
?指令中的形式地址D就是操作数的有效地址E,
即EA=D,Data=(D)。
? (4)间接寻址
?指令地址字段中的形式地址D不是操作数的真正地址,而是操作数地址的地址,或者说D
单元的内容才是操作数的有效地址,即:EA=
(D),Data=((D)),如图5.3所示。
?采用间接寻址可扩大的寻址范围。
?设D为8位,存储器字长为16位,则:
?直接寻址:EA=D(8位),寻址范围是2
8
=256;
?间接寻址:EA=(D)(16位),寻址范围是2
16

64K。
? (5)寄存器寻址
?操作数在寄存器中。即:EA=R,Data=(R),
此时指令中给出的操作数地址不是内存的地址单元号,而是通用寄存器的编号。
? (6)寄存器间接寻址
?操作数地址在寄存器中。即:EA=(R),Data
=((R))。
?采用寄存器间接寻址可提高机器的寻址速度。
?采用寄存器间接寻址也可扩大的寻址范围,若寄存器长为16位,则:EA=(R)(16位),寻址范围是2
16
=64K。
? (7)变址寻址
?操作数地址为变址寄存器中的内容与位移量D之和,即:
EA=(R)
变址
+D,变址寻址一般用于数组的操作。
? (8)相对寻址
?用程序计数器PC的内容作为基准地址,指令中给出的形式地址作为位移量(可正可负),二者相加后形成操作数的有效地址,即:EA=(PC)+D。采用相对寻址方式的好处是程序员勿需用指令的绝对地址编程,因而所编程序可以放在内存任何地方,相对寻址一般用于转移指令中。
? (9)基址寻址
?指令中给出一个形式地址(作为修改量),并给出基址寄存器号,基址寄存器内容(作为基址)
与形式地址相加得到操作数有效地址。即:EA
=(R)
基址
+D
? (10)复合寻址方式
?复合寻址方式是把间接寻址方式同相对寻址方式或变址方式相结合而形成的寻址方式。它分为先间接方式与后间接方式两种。
? ·相对间接寻址
?操作数的有效地址EA数学形式为:EA
=((PC)+D)。
? ·间接相对寻址
?操作数的有效地址EA数学形式为:EA
=(PC)+(D)。
? ·变址间接寻址
?操作数的有效地址EA数学形式为:EA=((R)
+D)。
? ·间接变址寻址
?操作数的有效地址EA数学形式为:EA=(R)
+(D)。
? ·基址+变址寻址:操作数的有效地址EA数学形式为:EA=(R)
基址
+(R)
变址
+D
? (11)段寻址方式
?段寄存器中的16位数左移4位,然后与16
位偏移量相加,形成内存所需的20位物理地址。这种寻址方式的实质还是基值寻址。
?例5.5 假设(R)=1000,(1000)=2000,
(2000)=3000,(PC)=4000,问在以下寻址方式下访问到的操作数的值是什么?
? (1)寄存器寻址R
? (2)寄存器间接寻址(R)
? (3)直接寻址1000
? (4)存储器间接寻址(1000)
? (5)相对寻址-2000(PC)
? (6)立即数寻址#2000
?【例题答案】
? (1)Data=(R)=1000
? (2) Data=((R))=(1000)=2000
? (3) Data=(1000)=2000
? (4) Data=((1000))=(2000)=3000
? (5)EA=(PC)-2000=4000-2000=2000
Data=(EA)=(2000)=3000
? (6) Data=2000
指令系统的设计举例
?例1 某机主存容量为64k×l6位,采用单字长、单地址指令,共有60条。试采用立即、直接、寄存器、寄存器间接、变址、变址间接、相对、相对间接这八种寻址方式设计指令格式。并说明每一种寻址方式的寻址范围及有效地址计算方法。
?【例题分析】
? 60条指令操作码字段(OP)至少需占用6位;寻址方式有八种,所以寻址字段3位(其中I为间接特征,X为寻址模式);形式地址(D)7位。
?其指令格式如下:
15 10 9 8 7 6 0
OP I X D
寻址模式定义、寻址方式的寻址范围如下,
寻址方式名称 I X 有效地址E 寻址范围
立即 0 00 E=(PC) 1个单元
相对 0 01 E=(PC)+D(7位) PC附近-64∽63共128个单元
变址 0 10 E=(IX)+D(16位) 64K个单元
寄存器 0 11 E=R(D部分为寄存器编号) 决定CPU中有多少个可用的寄存器
直接 1 00 E= D (7位) 128个单元
相对间接 1 01 E=((PC)+D)(16位) 64K个单元
变址间接 1 10 E=((IX)+D)(16位) 64K个单元
寄存器间接 1 11 E=(R)(16位) 64K个单元
其中寄存器R(16位),IX为变址寄存器,PC为程序计数器(16位),在变址和相对寻址时,
位移量D可正可负。
5.7 精简指令系统计算机(RISC)和复杂指令系统计算机(CISC)
? 1,复杂指令系统计算机(CISC)
?为了做到程序兼容,同一系列计算机的新机器和高档机的指令系统只能扩充而不能减去任意一条,因此也促使指令系统越来越复杂,某些计算机的指令多达几百条。我们称这些计算机为复杂指令系统计算机(Complex Instruction
Set Computer,简称CISC)。
? CISC复杂指令系统计算机的其特点是:
?(1)指令系统复杂庞大,指令数目一般多达2、3百条。
?(2)寻址方式多
?(3)指令格式多
?(4)指令字长不固定
?(5)可访存指令不加限制
?(6)各种指令使用频率相差很大
?(7)各种指令执行时间相差很大
?(8)大多数采用微程序控制器
? 2,精简指令系统计算机(RISC)
?⑴RISC的意义
? CISC指令系统很复杂,功能很强,但不一定能提高机器的速度,原因是:
?①CISC中采用很多复杂的寻址方式,为了计算有效地址,需花费一定的时间,有的指令需要多次访问主存器,所以执行速度会降低。
?
?②复杂指令系统的实现需要复杂的控制器来支持,且系列机为实现兼容,其控制部件多用微程序控制方式来实现,以便于指令系统的扩展。但微程序控制部件执行一条机器指令一般需要几个微周期,因此严重降低了指令的执行速度。
?③为了提高指令的执行速度,CISC中常采用流水线技术,但由于很多问题,例如指令系统采用变字长指令,不同指令争用共同资源以及转移指令等,使流水线的效率不高。
?所以,传统的CISC设计思想并不利于提高计算机的速度。而且,复杂的指令系统必然增加硬件实现的复杂性,从而使计算机的研制周期长,
投资高。
? (2) RISC的特点
?精简指令系统计算机的着眼点不是简单地放在简化指令系统上,而是通过简化指令使计算机的结构更加简单合理,从而提高处理速度,
其主要途径是减少指令的执行周期数。
?计算机执行程序所需要的时间P可用下式表示:P=I×CPI×T
?其中I是高级语言程序编译后在机器上运行的指令数,CPI为执行每条指令所需的平均周期数,T是每个机器周期的时间。
?由于RISC指令比较简单,原CISC机中比较复杂的指令在这里用子程序来代替,因此RISC的
I要比CISC多20%~40%。但是RISC的大多数指令只用一个机器周期实现,所以CPI的值要比CISC小得多。同时因为RISC结构简单,所以完成一个操作所经过的数据通路较短,使得
T值大为减少。后来,RISC的硬件结构有很大改进,一个机器周期平均可完成1条以上指令,
甚至可达到几条指令。
? RISC是在继承CISC的成功技术并克服
CISC的缺点的基础上产生并发展起来的,
大部分RISC具有下述一些特点:
?①优先选取使用频率最高的一些简单指令,以及一些很有用但不复杂的指令。
避免复杂指令。
?②大多数指令在一个机器周期内完成
?③采用LOAD/STORE结构
?由于访问主存储器指令花费时间较长,因此在指令系统中尽量减少访问主存指令,而只保留不能再减掉的LOAD(取数)和STORE(存数)两种访存指令。也就是说其余指令只能对存放在寄存器中的操作数进行处理。
?④较少的指令数和寻址方式
?选取使用频率最高的一些简单指令以及很有用但不复杂的指令,可简化控制部件。用简单的寻址方式有利于减少指令的执行周期数。
?⑦硬布线控制逻辑
?由于指令系统的精简,控制部件可由组合逻辑实现,不用或少用微程序控制,
这样可使控制部件的速度大大提高。
?⑧注重编译的优化
? 3.RISC指令系统举例
?一个较完整的指令系统,应包含传送类指令、算术运算类指令、逻辑运算类指令、移位指令、转移指令、
字符串指令和程序控制类指令。若统一编址,则用传送指令即可达到输入输出的目的;若单独编址,则需要专门的输入输出指令。
? SPARC指令系统是一RISC,字长32位,有三种指令格式、六种指令类型。
? (1)SPARC的指令格式
? SPARC的指令格式有如下三种,其中OP,OP2,OP3,
为指令操作码,OPf为浮点指令操作码。
?⑤固定的指令格式
?指令长度、格式固定,可简化指令的译码逻辑,并有利于提高流水线的执行效率。为了便于编译的优化,常采用三地址指令格式。
?⑥面向寄存器的结构
?为减少访问主存储器,CPU内应设大量的通用寄存器。
操作码。
格式
1 31 30 29 0
CALL
指令
OP disp 30(
位移量
)
CALL为子程序调用指令,采用相对寻址方式形成转移地址。为了扩大寻址范围,本条指令的操作码只取两位,位移量有30位。
格式
2 3l 30 29 28 25 24 22 21 0
BRANCH
指令
OP A Cond OP2 disp22(
位移量
)
Br anc h为条件转移指令,根据指令中的Cond字段(条件码)决定程序是否转移。转移地址由相对寻址方式形成。
SETHI指令的功能是将22位立即数左移10位,送入Rd所指示的寄存器中,然后再执行一条加法指令以补充后面10位数据,从而形成32位字长的数据。
31 30 29 25 24 19 18 14 13 12 5 4 0
格式
3
OP Rd OP3 Rs1 i As1 Rs2
OP Rd OP3 Rs1 i Simml3
其他指令
OP Rd OP3 Rs1 Opf Rs2
Rs1、Rs2为通用寄存器地址,用作源操作数寄存器地址或地址寄存器地址。
? Rd为目标寄存器地址,目标寄存器用来保存运算结果或由存储器取来的数据。但是在执执行存数指令时,保存的则是源操作数,并将此操作数送往指定的存储器单元地址中。
? Simml3是13位扩展符号的立即数,运算时若其最高位为1,则最高位前面的所有位都扩展为1;若其最高位为0,则最高位前面的所有位都扩展为0。
? i用来选择第二个操作数,i=0时,第二操作数在Rs2中;i=1时,第二操作数为Simml3。
?①算术运算/逻辑运算/移位指令
?功能:(Rsl) OP (Rs2)→Rd (当i=0时)
? (Rsl) OP Simml3→Rd (当i=1时)
?本指令将Rsl,Rs2的内容(或Simml3)按操作码所规定的操作进行运算后将结果送
Rd。RISC的特点之一是所有参与算术逻辑运算的数均在寄存器中。
?②LOAD/STORE指令(取数/存数指令)
?功能:LOAD指令将存储器中的数据送Rd中;
? STORE指令将Rd的内容送存储器中。
?存储器地址的计算(寄存器间址寻址方式):
?当i=0时,存储器地址=(Rsl)+(Rs2);
?当i=1时,存储器地址=(Rsl)+Simml3。
?在RISC中,只有LOAD/STORE指令访问存储器。
?③控制转移类指令
?此类指令改变PC值,SPARC有五种控制转移指令:
? A.子程序调用指令(CALL),前面已介绍。
? B.条件转移指令(Branch),前面已介绍。
? C.转移并连接(JMPL) 采用寄存器间址方式形成转移地址,并将本条指令的地址(即PC值)保存在以rd为地址的寄存器中,以备程序返回时用。
? D.陷阱(trap) 采用寄存器间址方式形成转移地址。
? E.从trap程序返回(RETT) 采用寄存器间址方式形成返回地址。
? (2) 某些指令的实现技巧
?在SPARC中,有一些指令没有设置,但很容易用一条其他指令来替代,这是因为SPARC约定R
0
的内容恒为零,而且立即数可以作为一个操作数处理。
?如寄存器间的传送指令MOVE可用ADD Rs,
R
0
,Rd指令来实现,因为(R
0
)=0,所以
(Rs)+(R
0
)→Rd相当(Rs)→Rd。
? RISC指令系统虽然精减了一些指令,但指令系统的功能并没减少,可以用另一条指令来实现这条指令。当然有时可能需要连续执行几条指令才能完成另一条指令的功能,但指令之间各字段的划分比较一致,各字段的功能也比较规整。
?见P151 表5.3