第七章 指令系统
第七章 指令系统
本章主要介绍机器指令系统的分类、常见的寻址方式、指令格式以及设计指令系统时应考虑的各种因素。此外对RISC技术也作了简要的介绍。希望读者进一步体会指令系统与机器主要功能以及与硬件结构之间存在的密切关系。
7.1 机器指令
由第一章所知,计算机能解题是由于机器本身存在一种语言,它既能理解人的意图,又能被机器自身识别。机器语言是由一条条语句构成的,每一条语句又能准确表达某种语义。例如它可命令机器做某种操作,指出参与操作的数或其它信息在什么地方等等。计算机就是连续执行每一条机器语句而实现全自动工作的。人们习惯把每一条机器语言的语句叫机器指令,而又将全部机器指令的集合叫做机器的指令系统。因此机器的指令系统集中反映了机器的功能。
计算机设计者主要研究如何确定机器的指令系统,如何用硬件电路、芯片、设备来实现机器指令系统的功能。计算机的使用者则是依据机器提供的指令系统,使用汇编语言来编制各种程序。计算机使用者根据机器指令系统所描述的机器功能,能很清楚地了解计算机内部寄存器-存储器的结构,以及计算机能直接支持的各种数据类型。
7.1.1 指令的一般格式
指令是由操作码和地址码两部分组成的,其基本格式如图7.1所示。
操作码字段地址码字段 图7.1 指令的一般格式
1.操作码
操作码是用来指明该指令所要完成的操作,如加法、减法、传送、移位、转移等等。通常,其位数反映了机器的操作种类,也即机器允许的指令条数,如操作码占七位,则该机器最多包含27=128条指令。
操作码的长度可以是固定的,也可以是变化的。前者将操作码集中放在指令字的一个字段内,如图7.1所示。这种格式便于硬件设计,指令译码时间短,广泛用于字长较长的、大中型计算机和超级小型计算机以及RISC(Reduced Instruction Set Computer)中。如IBM370和VAX-11系列机,操作码长度均为
295
计算机组成原理
8位。
操作码长度不固定的指令,其操作码分散在指令字的不同字段中。这种格式可有效地压缩操作码的平均长度,在字长较短的微机中被广泛采用。如PDP?11,Intel8086/80386等,操作码的长度是可变的。
操作码长度不固定会增加指令译码和分析的难度,使控制器的设计复杂。通常采用扩展操作码技术,使操作码的长度随地址数的减少而增加,不同地址数的指令可以具有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长。图7.2是一种扩展操作码的安排示意。
OP 0000四位操作码 0001 : 1110 1111八位操作码 1111 : 1111 1111十二位操作码 1111 : 1111 1111十六位操作码 1111 : 1111A1A1A1 :A1 0000 0001 : 1110 1111 1111 : 1111 1111 1111 : 1111 A2A2A2 :A2A2A2 :A2 0000 0001 : 1110 1111 1111 : 1111 A3A3A3 :A3A3A3 :A3A3A3 :A3 15条三地址指令15条二地址指令15条一地址指令 0000 0001 : 111116条零地址指令
图7.2 一种扩展操作码的安排示意
图中指令字长为16位,其中4位为基本操作码字段OP,另有三个4位长的地址字段为A1、A2、A3。4位基本操作码若全部用于三地址指令,则有16条。图中所示是三地址指令15条,二地址指令15条,一地址指令15条,零地址指令16条,共61条。
除了这种安排以外,还有其它多种扩展方法,如形成15条三地址指令,12
296
第七章 指令系统
条二地址指令,31条一地址指令和16条零地址指令,共74条指令,读者可自行安排。
在设计操作码不固定的指令系统时,应尽量考虑安排指令使用频度(即指令在程序中出现的概率)高的指令占用短的操作码,对使用频度低的指令可占用较长的操作码,这样可以缩短经常使用的指令的译码时间。当然,考虑操作码长度时也应考虑地址码的要求。
2.地址码
地址码用来指出该指令的源操作数的地址(一个或两个)、结果的地址以及下一条指令的地址。这里的“地址”可以是主存的地址,也可以是寄存器的地址,甚至可以是I/O设备的地址。
下面以主存地址为例,分析指令的地址码字段。 (1)四地址指令
这种指令的地址字段有四个,其格式为:
OP A1 A2 A3 A4 其中,OP为操作码;
A1 为第一操作数地址; A2 为第二操作数地址; A3 为结果地址;
A4 为下一条指令的地址。
该指令完成 (A1) OP (A2) → A3的操作。这种指令直观易懂,后续指令地址可以任意填写,可直接寻址的地址范围与地址字段的位数有关。如果指令字长为32位,操作码占8位,4个地址字段各占6位,则指令的直接寻址范围为 26 = 64。如果地址字段均指示主存的地址,则完成一条四地址指令,共需访问四次存储器(取指令一次,取两个操作数两次,存放结果一次)。
因为程序中大多数指令是按顺序执行的,而程序计数器PC既能存放当前欲执行指令的地址,又有计数功能,因此它能自动形成下一条指令的地址。这样,指令字中的第四地址字段A4便可省去,即得三地址指令格式。
(2)三地址指令
三地址指令中只有三个地址,其格式为:
OP A1 A2 A3 它可完成 (A1) OP (A2) → A3的操作,后续指令的地址隐含在程序计数器PC之中。如果指令字长不变,设OP仍为8位,则三个地址字段各占8位,故三
297
计算机组成原理
地址指令直接寻址范围可达28 = 256。同理,若地址字段均为主存地址,则完成一条三地址指令也需访问四次存储器。
其实,机器在运行过程中,没有必要将每次运算结果都存入主存,中间结果可以暂时存放在CPU的寄存器(如ACC)中,这样又可省去一个地址字段A3,从而得出二地址指令。
(3)二地址指令
二地址指令中只含两个地址字段,其格式为:
OP A1 A2 它可完成 (A1) OP (A2) → A1的操作,即A1字段既代表源操作数的地址,又代表存放本次运算结果的地址。有的机器也可以表示 (A1) OP (A2) → A2的操作,此时A2除了代表操作数源地址外,还代表中间结果的存放地址。这两种情况完成一条指令仍需访问四次存储器。如果使其完成 (A1) OP (A2) →ACC,此时,它完成一条指令只需三次访存,它的含义是中间结果暂存于累加器ACC中。在不改变指令字长和操作码的位数前提下,二地址指令可直接寻访的主存地址数为212 = 4K。
如果将一个操作数的地址隐含在运算器的ACC中,则指令字中只需给出一个地址码,构成了一地址指令。
(4)一地址指令
一地址指令的地址码字段只有一个,其格式为:
OP A1 它可完成 (ACC) OP (A1) →ACC的操作,ACC既存放参与运算的操作数,又存放运算的中间结果,这样,完成一条一地址指令只需两次访存。在指令字长仍为32位、操作码位数仍固定位8位时,一地址指令可直接寻址的范围达224,即16M。
在指令系统中,还有一种指令可以不设地址字段,即所谓零地址指令。 (5)零地址指令
零地址指令在指令字中无地址码,例如进栈(PUSH)、出栈(POP)这类指令,其操作数的地址隐含在堆栈指针SP中(有关这类指令的内容详见7.4)。
通过上述介绍可见,用一些硬件资源如PC、ACC承担指令字中需指明的地址码,可在不改变指令字长的前提下,扩大指令直接寻址的范围。此外,用PC、ACC等硬件代替指令字中的某些地址字段,还可缩短指令字长,并可减少访存次数。因此,究竟采用什么样的地址格式,必须从机器性能出发综合考虑。
298
第七章 指令系统
以上讨论的地址格式均以主存地址为例,实际上地址字段也可用来表示寄存器。当CPU中含有多个通用寄存器时,对每一个寄存器赋以一个编号,便可指明源操作数和结果存放在哪个寄存器中。地址字段表示寄存器时,也可有三地址、二地址、一地址之分。它们的共同点是,在指令的执行阶段都不必访问存储器,直接访问寄存器,使机器运行速度得到提高(因为寄存器类型的指令只需在取指阶段访问一次存储器)。
7.1.2 指令字长
指令字长取决于操作码的长度、操作数地址的长度和操作数地址的个数。不同机器的指令字长是不相同的。
早期的计算机指令字长、机器字长和存储字长均相等,因此访问某个存储单元,便可取出一条完整的指令或一个完整的数据。这种机器的指令字长是固定的,控制方式比较简单。
随着计算机的发展,存储容量的增大,要求处理的数据类型增多, 计算机的指令字长也发生了很大的变化。一台机器的指令系统可以采用位数不相同的指令,即指令字长是可变的,如单字长指令、多字长指令。控制这类指令的电路比较复杂,而且多字长指令要多次访问存储器才能取出一条完整的指令,因此使CPU速度下降。为了提高指令的运行速度和节省存储空间,通常尽可能把常用的指令(如数据传送指令、算逻运算指令等)设计成单字长或短字长格式的指令。
例如,PDP8指令字长固定取8位;NOVA指令字长固定取16位;IBM370指令字长可变,可以是16位(半个字)、32位(一个字)、48位(一字半);Intel8086的指令字长可以为8、16、24、32、40和48位六种。通常指令字长取8的整数倍。
299
相关推荐: