您的位置:首页 > 理论基础

计算机组成原理——指令系统

2017-05-29 10:54 633 查看
第 6 章 指 令 系 统
基本知识点:指令系统和指令的基本概念,指令格式,指令操作码扩展技术,各种寻址方式及其特点,RISC 和 CISC 指令系统的特点。


点:指令格式,指令操作码扩展技术,各种寻址方式及其特点。


点:指令格式,指令操作码扩展技术,各种寻址方式及其特点。

6.1 知识点 1:指令系统的基本概念

6.1.1 要点归纳

1. 指令的基本格式

一条指令就是机器语言的一个语句,它是一组有意义的二进制代码,实际上每条指令的各个部分都可以看作是单个数字,将这些数字拼在一起就形成了指令。把指令的数字形式称为机器语言,这样的指令序列叫做机器代码。指令的基本格式如下:

 
其中操作码指明了指令的操作性质及功能,地址码则给出了操作数的地址。

指令的长度是指一条指令中所包含的二进制代码的位数,它取决于操作码字段的长度、操作数地址的个数及长度。指令长度与机器字长没有固定的关系,可以等于机器字长,也可以大于或小于机器字长。通常,把指令长度等于机器字长的指令称为单字长指令,指令长度等于半个机器字长的指令称为半字长指令,指令长度等于两个机器字长的指令称为双字长指令。

在一个指令系统中,若所有指令的长度固定,则称为定长指令结构。若各种指令的长度随指令功能而异,则称为变长指令结构。定长指令结构系统控制简单,但不够灵活,变长结构指令系统灵活但控制较复杂。

1)几种常见的指令格式

计算机执行一条指令所需要的全部信息都必须包含在指令中。根据地址码的结构分为

以下几种指令格式。

(1)四地址指令

其指令格式如下:

 

指令含义:(A1) OP (A2) → A3,A4=下条将要执行指令的地址。

符号含义:OP 为具体的操作,Ai表示地址,(Ai)表示存放于该地址的内容。执行一条四地址的双操作数运算指令,共需访问 4 次主存:第一次取指令本身;第 2 次取第一操作数;第 3 次取第二操作数;第 4 次保存运算结果。

若指令字长为 32 位,操作码占 8 位,4 个地址码字段各占 6 位,则指令操作数的直接寻址范围为 26=64。

(2)三地址指令

其指令格式如下:

 

指令含义:(A1) OP (A2) → A3,(PC) + 1 → PC(隐含)

符号含义:OP 为具体的操作,Ai表示地址,PC 为程序计数寄存器,用于存放下一条指令的地址,从而消除四地址指令中的 A4,形成更短的三地址指令。

执行一条三地址的双操作数运算指令,也需访问 4 次主存:第一次取指令本身;第 2次取第一操作数;第 3 次取第二操作数;第 4 次保存运算结果。

若指令字长为 32 位,操作码占 8 位,3 个地址码字段各占 8 位,则指令操作数的直接寻址范围为 28=256。

( 3)二地址指令

其指令格式如下:

 
指令含义:(A1) OP (A2) → A1,(PC) + 1 → PC(隐含)

符号含义:A1为目的操作数地址,A2为源操作数地址。

执行一条二地址的双操作数运算指令,共需访问 4 次主存:第一次取指令本身;第 2次取目的操作数;第 3 次取源操作数;第 4 次保存运算结果。并且源操作数地址中原存的内容被破坏了。

若指令字长为 32 位,操作码占 8 位,两个地址码字段各占 12 位,则指令操作数的直接寻址范围为 212=4K。

二地址指令有两个操作数,这些操作数并不一定都在主存中,往往有一个或两个在通用寄存器中,这样构成不同的类型,详见后面的二地址指令的分类。当操作数放在通用寄存器中时,每个通用寄存器有一个编号,需要指定相应的寄存器编号即可。

(4)一地址指令

其指令格式如下:

 
指令含义:(ACC) OP (A1) → ACC,(PC) + 1 → PC(隐含)

符号含义:ACC 为累加寄存器。

执行一条一地址的双操作数运算指令,共需访问两次主存:第一次取指令本身;第 2次取第二操作数。

若指令字长为 32 位,则操作码占 8 位,一个地址码字段则占 24 位,指令操作数的直接寻址范围为 224=16M。

(5)零地址指令

其指令格式如下:

 
指令含义:无地址码。例如,空操作(NOP)、停机(HLT)、子程序返回(RET)和中断返回(IRET)等,这类指令没有地址码,其操作数的地址隐含在堆栈的栈顶指针 SP 中。

例如,零地址加法指令仅用在堆栈计算机中,操作数和结果都保存在堆栈中,参与加法运算的两个操作数隐含地从堆栈顶部弹出,送到运算器中进行运算,运算的结果再隐含地压入堆栈。所有这些指令都会执行(PC)+1→PC。

2)二地址指令的分类

二地址指令有两个操作数,这些操作数并不一定都在主存中,往往有一个或两个在通用寄存器中,这样就构成了不同的类型,表 6.1 列出了不同类型的二地址指令的区别。

 

其中,M-M 可以表示为 MM 或 SS,R-M 可以表示为 RM 或 RS。

3)操作数类型及数据存放方式

机器中常见的操作数类型有地址、数字、字符和逻辑数据等。

通常计算机中的数据存放在存储器或寄存器中,寄存器的位数便可反映机器字长。一般情况下,机器字长可取字节的 1、2、4、8 倍,这样便于字符的处理。由于不同的机器数据字长不同,每台机器处理的数据字长也不统一,有 8(字节)、16(字)、32(双字)和64(四字)等。当所存数据不能满足要求时,可填充一个至多个空白字节,而字节的次序有两种,一是低字节低地址,另一种是高字节低地址。

在数据不对准边界的计算机中,数据(例如一个字)可能在两个存储单元中,此时要访问两次存储器,并对高低字节的位置进行调整后才能取字。

指令格式中每个地址码的位数与主存容量和编址单位有关,主存越大,访问全部存储空间所需的地址码位数就越长。另外,以字(16 位或更长)为编址单位比以字节(8 位)为编址单位所需地址码的位数要少些。

2. 定长操作码指令格式

指令系统中的每一条指令都有一个唯一的操作码,指令不同,其操作码的编码也不同。所谓定长操作码指令格式是指操作码字段的位数和位置是固定的。

假定指令系统共有 m 条指令,指令中操作码字段的位数为 N 位,m 和 N 有如下关系式:

m≤2N,即 N≥log2m

根据指令格式中的地址码的个数可将指令分为零地址指令、一地址指令、二地址指令、三地址指令和多地址指令等。

3. 扩展操作码指令格式

扩展操作码指令格式就是操作码的长度不固定,操作码的长度随地址码个数的减少而增加,不同的地址数的指令可以具有不同长度的操作码。这样在满足需要的前提下,有效地缩短了指令字长。如图 6.1 所示为一种扩展操作码的安排方式,共有 61 条指令。

 

 
在设计操作码指令格式时,必须注意以下两点:

☆ 不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同。

☆ 各条指令的操作码一定不能重复。

通常情况下,对使用频率较高的指令,分配较短的操作码,而对使用频率较低的指令,

分配较长的操作码,从而尽可能减少指令译码和分析的时间。

【例 6.1】 假设指令字长为 16 位,操作数的地址码为 6 位,指令有零地址和一地址两种格式。

(1)设操作码固定,零地址指令有 512 种,则一地址指令最多有几种?

(2)采用扩展操作码技术,零地址指令有 512 种,则一地址指令最多有几种?

解:(1)对于一地址指令,操作码长度=16-6=10,这 10 位操作码可有 210=1024 种操作。由于操作码固定,也就是说零地址和一地址的操作码长度均为 10 位,则除去零地址指令 512种,剩下一地址指令最多 1024-512=512 种。

(2)采用扩展操作码技术,操作码位数可变,则一地址和零地址的操作码长度分别为10 和 16 位。可见一地址指令操作码每减少一种,就可多构成 26种零地址指令操作码。

设一地址指令有 X 种,则零地址指令最多有(210-X)×26种,依题意:

(2^10-X)×2^6=512

所以,X=1016,即此种情况下,一地址指令最多有 1016 种。

本例中第(1)题操作码指令属于定长操作码指令格式,第(2)题属于扩展

操作码指令格式。考生应领会两种指令格式的区别。

4. 多字长指令格式

由于机器数据字长不同,每台机器处理的数据字长也不统一。为了扩大寻址空间,可以采用两个字长或多个字长来存放一个指令字。

(1)双字指令

用两个机器字来存放的指令称为双字指令。若第一个指令字的操作数地址字段中存放得下,可把该数据安排在第一个指令字中,则在读出指令的同时也得到相关数据;否则只能将其存放在指令的第二个指令字中。例如,若机器字长为 16 位,设计双字指令格式如下:

 
(2)三字指令

用三个机器字来存放的指令称为三字指令。例如,若机器字长为 16 位,设计三字指令

格式如下:

 
5. 指令格式的优化与设计

指令格式的优化设计的主要目标有两个:一是节省程序的存储空间;二是指令格式要尽量规整,以减少硬件译码的复杂程度。

利用哈夫曼压缩思路,根据每类指令的使用频度,使用频度高的指令的操作码用较短的二进制位来表示,使用频度较低的指令的操作码用较长的二进制位来表示,使得平均二进制位数变短。

求哈夫曼编码的过程如下:

构造哈夫曼树。将所有使用频度值作为树的叶子节点,找出两个权值最小的相加,相加后的值作为新节点的权值,放入其中再作比较,继续用两个权值最小的节点相加,形成一个新节点,重复以上过程,直至根节点。

哈夫曼编码。按照二叉树左 1 右 0 的原则,在哈夫曼树上标出。然后从根节点到叶子节点的路径上的二进制符号即为该叶子节点对应的哈夫曼编码,将其作为该类指令的操作码。

6.2 知识点 2:指令的寻址方式

6.2.1 要点归纳

1. 有效地址的概念

指令的地址码字段并不一定代表操作数的真实地址,把它称为形式地址,记为 A。操作数的真实地址称为有效地址,记为 EA,它是由寻址方式和形式地址共同确定的。

所谓寻址方式,就是寻找指令或操作数的有效地址的方式,也就是指确定本条指令的数据地址以及下一条将要执行的指令地址的方法。寻址方式分为指令寻址和数据寻址两大类。

2. 数据寻址和指令寻址

1)指令寻址

指令寻址分为顺序寻址和跳跃寻址两种:

☆ 顺序寻址。通过程序计数器 PC 加 1,自动形成下一条指令的地址。

☆ 跳跃寻址。通过转移类指令实现。例如,对于 JMP 7 指令,无论在什么位置,它执行完后,便无条件地将 7 送至 PC,跳过其他指令,直接执行第 7 条指令。

2)数据寻址

数据寻址方式较多,为了区分各种方式,在指令中通常设一字段,用来指明属于哪种寻址方式,由此可知指令的格式如图 6.2 所示。

 

 
3. 常见数据寻址方式

1)立即寻址

立即寻址的方式是:操作数本身设在指令字内,即形式地址 A 不是操作数的地址而是操作数本身,又称之为立即数。数据是采用补码形式存放的,如图 6.3 所示,图中“#”表示立即寻址特征。

特点:指令在执行阶段不访存,但 A 的位数限制了立即数的范围。

立即寻址通常用于对某寄存器或主存单元赋初值。

 
 

2)直接寻址

直接寻址的方式是:指令字中的形式地址 A 就是操作数的真实地址 EA,即 EA=A。如图 6.4 所示。

特点:简单,只访问一次主存,但 A 的位数限制了操作数的寻址范围,例如 A 为 8 位,则寻址范围为 28=256 个存储单元,相对主存空间而言,这个范围太小了。

 
3)隐含寻址

隐含寻址的方式是:操作数隐含在操作码或某个寄存器中。例如,一地址格式的加法指令只给出一个操作数的地址,另一个操作数隐含在累加器 ACC 中,如图 6.5 所示。

特点:有利于缩短指令字长,但需要增加硬件。

 
4)间接寻址

间接寻址的方式是:指令中的形式地址不直接指出操作数的地址,而是指出操作码有效地址所在的存储单元地址,也就是说有效地址是由形式地址间接提供的,称为间接寻址,即 EA=(A),如图 6.6 所示,它是一次间接寻址,还可以有多次间接寻址。

例如,若 A 为 8 位,直接寻址范围为 2^8,一次间接寻址的寻址范围可达 2^8×2^8=2^16。

 

 
特点:采用间接寻址扩大了寻址范围,但指令在执行阶段需要多次访存,一次间接寻址需要访问主存 2 次,两次间接寻址需要访问主存 3 次,依次类推,n 次间接寻址需要访问主存 n+1 次。

5)寄存器寻址

寄存器寻址的方式是:在指令字中直接给出寄存器的编号,即 EA=Ri,其操作数在由Ri所指的寄存器内。

特点:可以减少指令字的长度,指令执行阶段不访存,只访问寄存器,速度快,但需要利用寄存器,而计算机中的寄存器个数有限。

6)寄存器间接寻址

寄存器间接寻址的方式是:寄存器 Ri中不是操作数,而是操作数所在主存单元的地址,即 EA=(Ri)。

特点:与一般间接寻址相比速度更快,但和寄存器寻址相比,指令的执行阶段需要访存(操作数在主存中)。

7)基址寻址

基址寻址的方式是:设有基址寄存器 BR,其操作数的有效地址 EA 等于指令字中的形式地址与基址寄存器 BR 中的内容(称为基地址)相加,即 EA=A+(BR)。

有时,基址可放在通用寄存器中,这样由用户指出是哪个通用寄存器存放基址,例如,以下指令格式指出基址存放在 Ri通用寄存器中:

 
特点:扩大寻址范围(因为基址寄存器的位数可以大于形式地址 A 的位数),适合多道程序设计,但需要增加硬件。

通常基址寄存器BR中的内容完全由操作系统或管理程序确定,也就是说基址寄存器是面向操作系统的,用户不能随意改变。

8)变址寻址

变址寻址的方式是:其有效地址 EA 等于指令字中的形式地址 A 与变址寄存器 IX 的内容相加之和,即 EA=A+(IX)。IX 是专用的变址寄存器,也可以采用通用寄存器作为变址寄存器。

特点:扩大寻址范围(前提是变址寄存器的位数大于形式地址 A 的位数),便于数组运算等处理,但需要增加硬件。

变址寻址和基址寻址的区别是,变址寄存器IX中的内容由用户给定,也就是说变址寄存器是面向用户的。

9)相对寻址

相对寻址的方式是:有效地址是将程序计数器 PC 的内容(即当前指令的地址)与指令字中的形式地址 A 相加而成,即 EA=(PC)+A。

对于JMP A的转移指令而言,每当CPU从存储器中取出一个字节时,会自动执行(PC)+1→PC,若该转移指令的地址为X,且占 2 个字节,在取出该指令后,PC的值会增 2,从而PC的值变为X+2,这样在执行完该指令后会自动跳转到X+2+A的地址继续执行。

特点:转移地址不固定,可随 PC 值的变化而定,因而无论程序在主存中的哪些区域都可正确执行,有利于编写浮动程序。

10)堆栈寻址

堆栈寻址的方式是:计算机中设有堆栈,操作数只能从栈顶地址指示的存储单元中存或取,可视为一种隐含寻址。

特点:无主存访问,访问堆栈时不需要给出要访问堆栈单元的地址,但应用有限。

【例 6.2】 一台计算机字长为 16 位,按字节编址,其指令字长为 16 位,第一个字节(高字节)包括操作码(5 位)和寻址方式 m(3 位),第二个字节(低字节)是地址码。如要执行的指令放在主存 100、101 两个字节中,指令 LOAD m A 表示从主存单元取数,送入累加器 ACC 中。ACC、变址寄存器 IX、程序计数器 PC 均为 8 位,如图 6.7 所示,求在立即寻址、直接寻址、间接寻址、相对寻址和变址寻址方式下指令完成时,ACC
的内容是什么?

解:(1)在立即寻址方式下,指令中直接给出操作数,放在地址码字段中,A=300,而LOAD m A 指令用于将 A 数据送入 ACC 中,即 A→ACC,所以(ACC)=A=300。

(2)在直接寻址方式下,EA=A=300,而 LOAD m A 指令用于将(EA)→ACC,所以

(ACC)=(EA)=(300)=102。

(3)在间接寻址方式下,A=300,EA=(A)=(300)=102,LOAD m A 指令用于将(EA)→ACC,所以(ACC)=(EA)=(102)=200。

(4)在相对寻址方式下,A=300,EA=(PC)+A=100+300=400,而 LOAD m A 指令用于将(EA)→ACC,所以(ACC)=(EA)=(400)=500。

(5)在变址寻址方式下,A=300,EA=(IX)+A=200+300=500,而 LOAD m A 指令用于将(EA)→ACC,所以(ACC)=(EA)=(500)=600。

 
4. 指令类型

一台计算机的指令系统通常有几十条至几百条指令,按其所完成的功能可分为多种类型,下面介绍常用的指令类型。

1)算术逻辑运算指令

用于支持二进制加法、减法、比较和求补码等基本的算术运算。通常情况下,根据算术运算的结果设置程序状态字 PSW 的各个状态位,一般有 Z(结果为 0)、N(结果为负)、V(结果溢出)、C(产生进位或借位)4 个状态位。当满足括号内所指出的条件时,相应位置成 1,否则为 0。例如,结果为 0 时,Z=1,否则 Z=0,依次类推。

2)移位操作指令

用于支持移位操作。可分为算术移位、逻辑移位和循环移位三种,可以将操作数左移或右移若干位。

3)数据传送指令

用于实现寄存器与寄存器、寄存器与存储器(主存)单元、存储器单元与存储器单元之间的数据传送。一次可以传送一个数据或一批数据。

4)转移类指令

用于控制程序流的转移,分为无条件转移和条件转移等类型。

☆ 无条件转移指令不受任何条件的约束,直接把程序转移到指令所规定的目的地,在那里继续执行。

☆ 条件转移指令则根据计算机处理结果来决定程序如何执行,它先测试根据处理结果设置的条件码,然后根据所测试的条件是否满足来决定是否转移。通常情况下,利用算术指令建立的条件码 N、Z、V、C 来控制程序的执行方向,实现程序的分支。

6.3 知识点 3:CISC 和 RISC 技术

6.3.1 要点归纳

1. 什么是 CISC 和 RISC

指令系统的发展有两种截然不同的方向,一种是增强原有指令的功能,设置更为复杂的新指令实现软件功能的硬化;另一种是减少指令种类和简化指令功能,提高指令的执行速度。前者称为复杂指令集计算机(CISC),后者称为精简指令集计算机(RISC)。

2. CISC 的特点

CISC 的中心思想是在指令系统中增加更多、更复杂的指令,以适应不同应用领域的需要。其主要特点如下:

☆ 指令系统复杂庞大,指令数目一般为 200~300 条。

☆ 指令长度不固定,指令格式多,寻址方式多。

☆ 可以访存的指令不受限制。

☆ 各种指令使用频度相差很大。

☆ 各种指令执行时间相差很大,大多数指令需要多个时钟周期才能完成。

☆ 控制器大多数采用微程序控制。

☆ 难以用优化编译生成高效的目标代码程序。

3. RISC 的特点

RISC 的中心思想是要求指令系统简化,尽量使用寄存器-寄存器操作指令。其主要特点如下:

☆ 选取使用频度较高的一些简单指令复杂指令的功能由简单指令的组合来实现。

☆ 指令长度固定,指令格式种类少,寻址方式种类少。

☆ 只有 Load/Store(取指/存数)指令访存,其余指令的操作在寄存器之间进行。

☆ CPU 中有多个通用寄存器。

☆ 控制器采用组合逻辑控制。

☆ 采用流水技术,大部分指令在一个时钟周期内完成。

☆ 采用优化了的编译程序。

RISC机一定是流水CPU,而流水CPU不一定是RISC机。

4. RISC 和 CISC 的比较

RISC 和 CISC 的比较如下:

☆ RISC 更能充分利用 VLSI 芯片的面积。CISC 机的控制器大多采用微程序控制,其控制存储器在 CPU 芯片内所占的面积为 50%以上,而 RISC 机控制器采用组合逻辑控制,其硬布线逻辑只占 CPU 芯片面积的 10%左右。

☆ RISC 更能提高运算速度。RISC 机的指令数、寻址方式和指令格式种类较少,又设有多个通用寄存器,并适合流水线工作,所以运算速度更快,大多数指令在一个时钟周期内完成。

☆ RISC 便于设计,可降低成本,提高可靠性。RISC 机指令系统简单,所以机器设计周期短;其逻辑简单,所以可靠性高。

☆ RISC 有利于编译程序代码优化,编译程序容易选择更有效的指令和寻址方式。

☆ RISC 不易实现指令系统兼容。从指令系统兼容性来看,CISC 大多能实现软件兼容,即高档机包含了低档机的全部指令,并可加以扩充。但 RISC 机简化了指令系统,指令数量少,格式也不同于老机器,因此大多数 RISC 机不能与老机器兼容。

文档已上传
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: