第5章 指 令 系 统 课件(共96张PPT)- 《计算机原理》同步教学(西安科大出版社)

资源下载
  1. 二一教育资源

第5章 指 令 系 统 课件(共96张PPT)- 《计算机原理》同步教学(西安科大出版社)

资源简介

(共96张PPT)
第5章 指 令 系 统
5.1 指令系统与性能
5.2 机器指令
5.3 操作码的编码方法
5.4 地址码的寻址方式
5.5 典型的指令系统
关联
习题
5.1 指令系统与性能
5.1.1 指令与指令系统
  指令是指示计算机去执行某种操作的命令。如果命令是二进制代码形式,则相应的指令为机器指令,机器指令是计算机能直接识别并执行的指令,而用任何其他形式的指令或语言所编写的程序必须通过“翻译”或“编译”,编译成机器语言程序,才能在计算机中运行。指令系统则是指计算机所有机器指令的集合,也称指令集(Instruction Set)。它是面向机器的,不同的计算机具有不同的指令系统,反过来讲,不同的指令系统决定了计算机不同的性能和功能。
  随着计算机的发展和应用领域的不断扩大,指令系统越来越丰富,机器指令的数量成倍增长,多达成百上千条,如此庞大的指令系统我们称之为复杂指令系统(CIS),具有复杂指令系统的计算机称为复杂指令系统计算机(CISC)。CISC就是采用复杂的指令系统,来达到增强计算机的功能、提高速度的目的。经过对CISC指令使用频率的测试分析,发现只有占指令系统20%的指令是常用的,剩余80%的指令在程序中出现的概率大约为20%。测试结果表明:花费巨大代价所增加的复杂指令只有20%左右的使用率,这将造成计算机硬件资源的巨大浪费。
  为此,人们开始考虑能否用最常用的20%左右的简单指令来组合实现不常用的80%的指令,于是,出现了精简指令系统(RIS)和精简指令系统计算机(RISC)。精简指令系统(RIS)是对复杂指令系统(CIS)进行简化和优化,使机器结构简化的同时,有效地提高机器的性能、速度和性能价格比。
5.1.2 指令系统的性能
  指令系统的性能将决定计算机的基本功能,因此,指令系统的设计是计算机系统设计的一个核心问题,它不仅与计算机的硬件紧密相关,还直接影响到用户的使用。一个完善的指令系统应满足以下几个方面的要求:
  (1) 完备性:要求机器的指令系统丰富,且功能齐全。
  (2) 有效性:是指用指令系统中的指令所编写的程序能被高效率地运行。高效率表现在程序所占存储空间小、执行速度快。
  (3) 规整性:包括指令系统的对称性、均匀性、一致性。对称性是指寄存器与存储器的对称,能对寄存器操作的指令同样能对存储器操作。均匀性是指各种数据类型适用于一种操作性质的指令。一致性是指指令长度和数据长度通常是字节的整数倍。
  (4) 兼容性:是指“向上兼容”,即抵挡机上运行的软件可以在高档机上运行。
  (5) 可扩展性:是指保留一定余量的操作码空间,便于扩展指令使用。
5.2 机 器 指 令
5.2.1 机器指令的格式
  根据指令的概念,一条机器指令形式上是一串二进制代码,我们通常把表示机器指令的这一串二进制代码称为指令字。作为一个指令字,不仅要表示出指令所进行的某种具体操作,还要表示出指令对谁操作以及操作结果的去向,即指令的操作对象。因此,任何一条机器指令都由两部分组成:一部分是操作码,另一部分是地址码。其格式为
  操作码OP:是指令所进行的具体操作的编码。不同的指令相应的操作和功能不同,则需要用不同的操作码来表示。因此,操作码的长度与机器所能执行操作的多少有关。
  地址码A:是指令操作对象的地址编码。它是一个广义的概念,它不仅可以是操作对象的存储地址,还可以是操作对象本身。因此,地址码的长度与存储器的容量、寄存器的多少、机器的字长有关。
5.2.2 指令字的长度
  指令字的长度是指一个指令字所包含的二进制代码的位数。结合机器指令的格式,指令字的长度取决于操作码的长度、地址码的长度和地址码的个数,因此,影响指令字长度的因素有多种,不同指令系统的指令长度各不相同,同一个指令系统的不同指令其长度也不尽相同,但为了便于存储,指令字的长度与机器字长之间具有一定的匹配关系,通常指令长度设计为字节的整数倍。
  例如8086/8088CPU的指令系统,最短的指令长度为1个字节,最长的指令长度为6个字节;再如奔腾系列机的指令系统,最短的指令长度为1个字节,最长的指令长度为12个字节。由于指令的长度不尽相同,我们不仅可以将指令按其长度进行分类,还可以将指令系统进行分类。如果指令的长度等于机器的字长,这样的指令称为单字长指令;如果指令的长度等于两倍的机器字长,这样的指令称为双字长指令;还可以分为更多倍字长的指令以及半字长指令等。如果指令系统中各种指令字的长度均固定,则称为定长指令字结构;如果指令系统中各种指令字的长度随指令功能而异,则称为可变长指令字结构。
  定长指令字结构:结构简单,指令的译码时间短,有利于硬件控制系统的设计,多用于机器字长较长的大、中型计算机和精简指令系统计算机。但指令字的长度普遍较长,冗余现象严重,不利于指令扩展。
  可变长指令字结构:结构灵活,能充分利用指令中的每一位,信息冗余少,平均指令长度短,易于指令的扩展。但指令格式不规整,硬件控制系统复杂。
5.2.3 机器指令的分类
  机器指令不仅可以按其长度划分为单字指令、双字指令和多字指令,还可以按指令中地址码的多少将机器指令划分为:零地址指令、单地址指令、双地址指令和多地址指令。
  1.零地址指令
  零地址指令的指令字中只有操作码,而没有地址码。其格式为
  零地址指令有以下两种情况:
  第一是指令不需要操作对象,也就不需要地址码,例如停机指令、空操作指令等。
  第二是指令需要一个操作对象,但这个操作对象可以隐含,从而指令的地址码也可隐含,例如对堆栈、累加器操作的指令。指令功能为:OP(AC)→AC。
  2.单地址指令
  单地址指令的指令字中只有一个地址码A,也称为一地址指令。其格式为
  单地址指令有以下两种情况:
  第一是指令有一个操作对象,并且这个操作对象不能隐含,必须用一个地址码表示,例如加1指令、减1指令等。指令功能为:OP(A)→A。
  第二是指令有两个操作对象,其中一个操作对象隐含,通常指累加器(AC),另一个用一个地址码表示,例如加法指令、减法指令等。指令功能为:(AC)OP(A)→AC。
  3.双地址指令
  双地址指令的指令字中有两个地址码A1和A2,也称为二地址指令。其格式为
  双地址指令的指令功能为:(A1)OP(A2)→A1或(A1)OP(A2)→A2。
  双地址指令可以分为三种指令类型:
  (1) S—S型指令,即存储器—存储器型指令,是指指令中两个操作对象都是存储器,用地址码A1和A2表示,A1、A2为主存地址。
  (2) R—R型指令,即寄存器—寄存器型指令,是指指令中两个操作对象都是寄存器,用地址码R1和R2表示,R1、R2为寄存器地址。
  (3) R—S型指令,即寄存器—存储器型指令,是指指令中两个操作对象一个是寄存器,一个是存储器,用地址码R和A表示,R为寄存器地址,A为主存地址。
在以上三种指令类型中,R—R型指令在被执行过程中不需要访问存储器,执行速度最快,因此是双地址指令中最常用的一种指令格式,尤其在RISC中,所有运算指令均为R—R型指令。
4.三地址指令
  三地址指令的指令字中有三个地址码A1、A2和A3,也称为多地址指令。其格式为
  三地址指令的指令功能为:(A1)OP(A2)→A3。
  三地址指令的指令字较长,多用于字长较长的大、中型计算机中,小型机和微型机很少使用。
5.3 操作码的编码方法
  操作码是机器指令的重要组成部分,是对指令所执行操作的编码,指令不同其操作码也不同,具体表现在:操作码长度相同,操作码不同或操作码长度不同。所以,按指令字中操作码的长度是否相同或固定,可以将操作码的编码分为固定长度的定长编码和可变长度的变长编码两种。
5.3.1 定长编码
  定长编码是最简单的操作码编码方法。由于操作码的长度和位置在指令字中是固定的,有利于简化指令结构和减少指令的译码时间,因此适用于字长较长的大、中型计算机。例如IBM 370机,其字长是32位,指令分为半字长、单字长、1.5倍字长指令类型,无论哪种类型的指令,其操作码的长度和位置都是固定的,由于操作码的长度固定为8位,指令系统所能允许的指令条数最多为28=256条,实际上IBM 370机只有183条指令,剩余的操作码编码为非法的操作码。如果操作码的编码采用定长编码,则指令字中的操作码长度取决于指令系统中的全部指令条数。例如,若指令系统中有m条指令,则操作码的长度n应满足下式:
n≥lb m    (5-1)
5.3.2 变长编码
  变长编码是指指令字中操作码的长度和位置不固定,随指令的不同而存在差异。采用变长编码方法,可以有效地压缩操作码的平均长度,在小型机和微机中被广泛采用。如小型机PDP-11,机器字长为16位,指令分为单字长、双字长、三字长等指令类型,操作码占5~6位,且遍及整个指令字长度范围。但由于操作码长度和位置不固定,因此增加了指令译码和分析的难度,使硬件设计复杂化。
  1.操作码扩展技术
  在不增加指令字长度的情况下,通过采用操作码扩展技术,使操作码的长度随地址码的减少而增加,这样一来,对于地址码个数不同的指令,可以具有不同长度的操作码,从而可以充分利用指令字的地址码,使有限的指令字长度可以表示更多的指令。
  设机器指令字长度为16位。其中操作码为4位,地址码为4位。指令格式为
  如果采用定长编码,4位操作码只能表示16条三地址指令。如果指令系统中除三地址指令外,还有二地址、一地址和零地址指令,且要求有15条三地址指令、15条二地址指令、15条一地址指令和16条零地址指令,则采用定长编码方法是无法满足上述要求的,这就需要采用变长编码方法,操作码的长度随地址码的减少而增加,具体操作码扩展如下:
  【例5-1】 某机器指令字长度为16位。其中地址码长度为4位。如果指令系统中三地址指令有11条、二地址指令有72条、零地址指令有64条,则最多还能设计多少条一地址指令?
  解:对于三地址指令:地址码共占12位,指令字中还剩4位用于操作码,其编码最多为24=16个,由于实际只有11条三地址指令,所以还剩下16-11=4个编码,可用于二地址指令。
  对于二地址指令:地址码共占8位,指令字中还剩8位用于操作码,扣除三地址指令用过的操作码,其编码最多为5×24=80个,由于实际只有72条二地址指令,所以还剩下80-72=8个编码,可用于一地址指令。
  对于一地址指令:地址码共占4位,指令字中还剩12位用于操作码,扣除三地址指令和二地址指令用过的操作码,其编码最多为8×24=128个,如果这128个编码都表示一地址指令,那么指令系统中就不存在零地址指令,实际上存在有零地址指令,所以,这128个编码并不都是一地址指令。究竟一地址指令还能设计多少条,这就取决于实际存在的零地址指令条数。由于系统要求有64条零地址指令,而4位操作码只能最多表示16条指令,所以,需要一地址指令提供64/16=4个操作码编码用于零地址指令,以保证零地址指令有64条。因此,指令系统中一地址指令最多还能设计128-4=124条指令。
  2.Huffman编码法
  Huffman编码法是根据各种指令使用的频率不同,采用优化技术,将使用频率最高的指令用最短的编码表示,而对于使用频率较低的指令用较长的编码表示,从而缩短操作码的平均长度。采用Huffman编码法所得到的操作码的平均长度为
其中,pi是第i条指令使用的频率,li是第i条指令操作码的长度,n是指令总数。
  下面以10条指令的机器为例来说明Huffman编码过程。已知10条指令的使用频率如表5-1所示。
表5-1 指令的使用频率
  1) Huffman树
根据指令的使用频率,画出Huffman树,具体步骤如下:
  (1) 按频率大小进行排列,频率相同的可任意排列。
  (2) 把出现频率最小的两项进行合并,将其频率相加,再把相加后的频率进行重新排序。
  (3) 重复步骤(2),直至只剩下最后两个频率,再将其合并,便形成Huffman树,如图5-1所示。
图5-1 Huffman树
  2) Huffman编码过程
  根据Huffman树,从根节点(最后两个频率形成的节点)开始编码,左分支编码为“1”,右分支编码为“0”;各个子节点也同根节点一样,左分支编码为“1”,右分支编码为“0”,直到末节点为止。各条指令的编码便是从根节点开始到末节点结束的一个二进制代码,如表5-2所示。
采用Huffman编码法所得到的操作码平均长度为
表5-2 Huffman编码结果
  H=   pi× li = (0.30+0.20)×2 +(0.16+0.09+0.08+
    0.07+0.04)×4 + (0.03+0.02+0.01) × 6
  =1+0.75+0.76+0.15+0.18
    =2.85
  若采用定长编码,由于指令有10条,所以操作码的长度为4。可见,采用Huffman编码法更有效地缩短了操作码的平均长度。
  3.扩展编码法
  采用Huffman编码法能更有效地缩短操作码的平均长度,但这种编码方法所形成的操作码很不规整,将会给译码造成极大的困难,不利于软件的编译。于是,采取了一种折中的方案,即将Huffman编码法与定长编码法进行有效结合,在缩短操作码平均长度的基础上,使操作码更加规整。这种编码方法称为扩展编码法。扩展编码结果如表5-2所示。采用扩展编码法所得到的操作码平均长度为
H= pi × li =(0.30+0.20)× 2+(0.16+0.09)× 3+ (0.08+
0.07+0.04)×4+0.03 × 5+(0.02+0.01)× 6
=1+1.76+0.36
=3.12
5.4 地址码的寻址方式
  寻址方式是指在指令被执行的过程中,根据指令字中的地址码去寻找操作对象的方式。如果地址码所表示的操作对象是数据信息,则这样的操作对象称为操作数,对应的寻址方式为操作数寻址方式;如果地址码所表示的操作对象是指令信息,则相应的寻址方式为指令寻址方式。
5.4.1 指令寻址方式
  指令寻址方式又可分为顺序寻址方式和跳转寻址方式,如图5-2所示。
图5-2 指令的寻址方式
  1.顺序寻址方式
  顺序寻址方式是采用PC增量的方式形成下一条指令地址。具体寻址过程如图5-2(a)所示,PC称为程序计数器,是用来跟踪程序的执行并指向下一条将要被执行的指令。由于程序在内存中是连续存放的,当程序顺序执行时,PC的内容加上一定的增量,便形成下一条将要被执行指令的地址,至于增量是多少,取决于指令所占存储单元的个数。
  2.跳转寻址方式
  跳转寻址方式是指当程序发生转移时,下一条将要执行的指令地址不再是PC的内容,而是根据转移指令字中的地址码A去形成下一条将要执行的指令地址。具体寻址过程如图5-2(b)所示,如果是地址码直接形成PC,记作A→PC,这种跳转寻址方式也称为绝对跳转;如果是当前PC的内容(现行PC加上增量)加上地址码形成PC,记作(PC)+A→PC,这种跳转寻址方式也称为相对跳转。
5.4.2 操作数寻址方式
  操作数的存放不像指令的存放有规律,它既可以存放在寄存器、存储器和外设中,也可以存放在指令中,因此表示操作数的地址码尽管形式上都是二进制代码,但所表示的含义各不相同,有时代表的是地址,有时代表的是数据,往往比较复杂,一般讨论寻址方式时,主要是讨论操作数寻址方式。下面以一地址指令为例,介绍几种最常用的基本寻址方式。一地址指令格式为
  由于操作数寻址方式种类较多,所以在指令字中设置一个寻址方式MOD字段,用来指明具体的寻址方式。当操作数存放在存储器中时,指令字中的地址码并不是内存的实际地址,因此我们把它称为形式地址。形式地址必须转换成内存的实际地址,然后才能访问存储器。内存的实际地址也称为有效地址(EA)。所以,EA是A的一个函数,记为EA=f(A)。函数f不同,其寻址方式也不同。
  1.立即寻址方式
  立即寻址方式是指指令字中的地址码本身就是操作数,即操作数是D,D也称为立即数,其格式为
  立即寻址的优点:由于从存储器中取出指令的同时,操作数也被取出了,并且操作数是在指令字中的,因此在执行指令时,不必再次访问存储器,从而提高了指令的执行速度。但由于指令字长度的限制,D的位数限制了立即数的大小。
  2.直接寻址方式
  直接寻址方式是指指令字中的地址码D(形式地址)就是操作数的有效地址,即EA=D。如图5-3所示。
  直接寻址简单直观,便于硬件实现。但由于指令字长度的限制,形式地址D限制了指令的寻址范围,随着内存容量不断扩大,要想寻址整个内存空间,势必造成指令字长度的增加。另外在编程时,如果使用了直接寻址指令,一旦操作数地址发生变化,就必须修改指令中的D,也给编程带来不便。
图5-3 直接寻址方式
  3.间接寻址方式
  间接寻址方式是指指令字中的地址码D(形式地址)不是操作数的有效地址,而是操作数的有效地址的有效地址,即EA = (D),如图5-4所示。
  与直接寻址相比,间接寻址比直接寻址灵活,使用较短的地址码可以访问较大的存储空间。另外,间接寻址有利于编程,如果使用了间接寻址指令,当操作数地址发生变化时,可不必修改指令,只需修改存放有效地址的单元内容即可。其缺点是指令的执行时间较长,因为需要多次访问存储器。
图5-4 间接寻址方式
  4.寄存器直接寻址方式
  寄存器直接寻址方式也称寄存器寻址方式,是指指令字中的地址码R(形式地址)是某一寄存器的编号,其寄存器的内容为指令所需的操作数,即EA=(R),如图5-5所示。
  由于寄存器寻址方式的操作数位于寄存器中,采用寄存器寻址方式的指令在被执行时,无需访问内存,从而减少了指令的执行时间;另外,由于内部寄存器数量有限,指令字中的地址码较短,有效地缩短了指令字长度。因此,寄存器寻址方式在计算机中得到了广泛的应用。
  5.寄存器间接寻址方式
  寄存器间接寻址方式是指指令字中的地址码A(形式地址)是某一寄存器的编号,其寄存器的内容不是指令所需的操作数,而是指令所需操作数的有效地址,即EA=((R)),如图5-6所示。
  指令采用寄存器间接寻址方式时,由于操作数的有效地址存放在寄存器中,因此该指令在被执行时只访问两次存储器,比间接寻址速度快。
图5-6 寄存器间接寻址方式
  6.变址寻址方式
  变址寻址方式是指指令字中的地址码A(形式地址)加上指令中指定的变址寄存器的内容形成操作数的有效地址,即EA=A+(Ri),如图5-7所示。
  指令采用变址寻址方式时,如果操作数地址发生变化时,可不必修改指令,只需按一定增量修改变址寄存器的内容,以方便实现循环程序设计。
图5-7 变址寻址方式
  7.基址寻址方式
  基址寻址方式是指指令字中的地址码D(形式地址)加上指令中指定的基址寄存器的内容形成操作数的有效地址,即EA=D+(Rb),基址寄存器通常是专用的寄存器,如图5-8所示。
图5-8 基址寻址方式
  基址寻址与变址寻址有效地址的形成过程很相似,但两者的应用有着本质的区别。基址寻址是面向系统的,用于将用户程序的逻辑地址转换成物理地址,以便实现程序的再定位,基址寄存器的内容通常是由操作系统进行设置,不允许进行增量或减量,并对用户是透明的。
  8.相对寻址方式
  相对寻址方式是将当前PC的内容(现行PC加上增量)加上地址码(形式地址)形成操作数的有效地址,即EA=(PC)+D→PC,D称为位移量,是定点整数的补码,如图5-9所示 。
  指令采用相对寻址方式时,编程时不需要用指令的绝对地址,可以将程序放在内存的任何地方。
  9.隐含寻址
  隐含寻址是指指令字中的地址码是A隐含的。对于一地址指令而言,指令格式中地址码A就缺省了,尽管没有地址码,但操作数是存在的,并规定为累加器AC。
5.5 典型的指令系统
5.5.1 复杂指令系统
  1.指令类型
  不同机器的指令系统是各不相同的,CISC的指令系统一般有上百种指令,按照指令的
功能对指令进行归类,一个较完善的复杂指令系统应该包含以下8种指令类型。
  1) 数据传送指令
  数据传送指令主要包括取数指令、存数指令、传送指令、交换指令、对堆栈操作的指令等,主要用于实现存储器与寄存器、堆栈之间以及寄存器与寄存器、堆栈之间的数据传送。
  2) 算术运算指令
  算术运算指令主要包括二进制定点数的四则运算指令、十进制数的四则运算指令、浮点数的四则运算指令、算术移位指令、比较指令、求补和求反指令等,主要用于定点数和浮点数的算术运算。
  3) 逻辑运算指令
  逻辑运算指令主要包括逻辑与、逻辑或、逻辑非、逻辑移位等指令,主要用于无符号数的位操作、代码转换、逻辑判断。
  4) 串操作指令
  串操作指令包括串传送指令、串比较指令、串搜索指令、串替换指令等,主要用于对字符串和数据串的处理。
  5) 转移指令
  转移指令也称程序控制指令,主要包括无条件转移指令、条件转移指令、调用与返回指令、中断与返回指令等,主要用于控制改变程序的执行顺序。
  6) 输入/输出指令
  输入/输出指令主要用于控制外设、检测外设的工作状态、实现对外设的数据传送。
  7) 特权指令
  特权指令是指具有特殊权限的指令,只用于操作系统,一般不会直接提供给用户。
  8) 其他指令
  其他指令主要指复位指令、停机指令、空操作指令、对状态寄存器的置位和复位指令。
综上所述,CISC指令系统具有以下特点:
  (1) 指令系统复杂庞大,表现为指令条数较多。
  (2) 指令格式多样,表现为指令字长不固定,寻址方式种类较多。
  (3) 指令的执行时间差别较大。
  (4) 大多数CISC指令系统采用微程序控制器。
  2.8086 CPU指令格式
  8086 CPU指令长度可以是1~6字节,其指令格式如图5-10所示。其中B1和B2为基本字节,B3~B6将根据不同指令作不同的定义。
图5-10 8086指令格式
  1) B1字节各字段定义
  (1) OP:表示指令操作码。
  (2) D:表示方向。D=1时,寄存器为目的操作数;D=0时,寄存器为源操作数。
  (3) W:表示字节或字处理方式。W=0表示字节处理指令;W=1表示字处理指令。
  2) B2字节各字段定义
  (1) MOD:表示指令的寻址方式。8086的一条指令中最多可使用两个操作数,它们不能同时位于存储器中,最多只能有一个是存储器操作数。MOD ≠ 11,为存储器方式,即有一个操作数位于存储器中;MOD=00,没有位移量;MOD=01,只有低8位位移量,需将符号扩展8位,形成16位;MOD=10,有16位位移量;MOD=11,为寄存器方式,两个操作数均为寄存器。
  (2) REG:表示指令中只有一个操作数,这个操作数为寄存器。
  (3) R/M:R/M受MOD制约。当MOD=11(即寄存器方式时),由此字段给出指令中第二个操作数所在的寄存器编码;当MOD ≠ 11时,此字段用来指出应如何计算指令中使用的存储器操作数的有效地址。MOD和R/M字段表示有效地址EA的计算方法。
  3) B3~B6字节各字段定义
  B3~B6这四个字节一般是给出存储器操作数地址的位移量(即偏移量)或立即操作数。位移量可为8位,也可为16位,这由MOD来决定。8086规定16位的字位移量的低位字节存于低地址单元,高位字节存于高地址单元。
  若指令中只有8位位移量,那么8086在计算有效地址时,自动用8位位移量的符号将其扩展成一个16位的双字节数,以保证有效地址的计算不产生错误,实现正确的寻址。指令中的立即操作数位于位移量的后面。若B3B4有位移量,立即操作数就位于B5B6字节;若指令中无位移量,立即操作数就位于B3B4字节。总之,指令中缺少的项将由后面存在的项顶替,以减少指令的长度。
5.5.2 精简指令系统
  1.RISC指令系统的特点
  结合表5-3所列出的典型RISC指令系统的基本特征,可以看出RISC指令系统有如下特点:
  (1) 指令条数少,所选取的指令都是使用频率较高的简单指令;
  (2) 指令字长固定,且指令格式种类少;
  (3) 只有取数/存数指令可以访问存储器,其他指令的操作都在寄存器之间进行。  
表5-3 典型RISC指令系统的基本特征
  2.SPARC机指令系统
  SPARC机是RISC指令系统最典型的代表,机器的字长为32位,共有75条指令。
  1) 指令类型和指令格式
  (1) SPARC机指令类型。
  ① 算术运算/逻辑运算/移位指令;
  ② 取数(LOAD)/存数(STORE)指令;
  ③ 控制转移指令;
  ④ 读/写专用寄存器指令;
  ⑤ 浮点运算指令;
  ⑥ 协处理器指令。
  (2) SPARC机指令格式。
  SPARC机有三种指令格式,如表5-4所示。
表5-4 SPARC机指令格式
  在表5-4中,OP、OP2、OP3为指令操作码,OPf为浮点指令操作码。为了增加立即数和偏移量的长度,调用指令CALL、转移指令BRANCH和SETHI指令的操作码缩短了,其中SETHI指令是将22位的立即数(imm22 )左移10位,送到Rd所指示的寄存器中,然后再执行一条加法指令,以补充后面10位数据,从而形成32位字长的数据。
  Rs1、Rs2为通用寄存器地址,用作源操作数寄存器地址或地址寄存器地址。
  Rd为目的寄存器地址,用来保存运算结果或从存储器取来的数据。
  Simm13是13位扩展符号的立即数。运算时如果Simm13最高位是1,则最高位前面的所有位都扩展为1;否则,最高位前面的所有位都扩展为0。
  i是用来选择第二个操作数的。当i=0时,第二个操作数在Rs2中;当i=1时,第二个操作数为Simm13。  
  2) 指令功能与寻址方式
  (1) 算术逻辑运算指令。
  功能:将Rs1、Rs2的内容(或Simm13)按操作码规定的操作运算后结果送Rd。
  当i=0时,(Rs1)OP(Rs2)→Rd;
  当i=1时,(Rs1)OP Simm13→Rd。
  (2) 取数/存数指令。
  功能:取数指令LOAD将存储器中的数据送往Rd;存数指令STORE将Rd中的数据送往存储器。
  存储器地址的计算方法如下(寄存器间接寻址):
  当i=0时,存储器地址=(Rs1)+(Rs2);
  当i=1时,存储器地址=(Rs1) + Simm13。
  (3) 控制转移指令。
  条件转移(BRANCH)指令:由Cond字段决定程序是否转移,用相对寻址方式形成转移地址。
  转移并连接(JMPL)指令:将本指令的地址保存在Rd所指示的寄存器中,以备程序返回使用。用寄存器间接寻址形成转移地址。
  调用(CALL)指令:采用相对寻址方式形成转移地址。
  陷阱(TRAP)指令:采用寄存器间接寻址形成转移地址。
  TRAP程序返回(RETT)指令:采用寄存器间接寻址形成转移地址。
  (4) 读/写专用寄存器指令。
  SPARC机有4个专用寄存器指令,即PSR、Y、WIM和TBR指令。其中,PSR称为程序状态寄存器,其内容反映并控制机器的运行状态,非常重要,因此,读/写PSR指令一般是特权指令。
  综上所述,SPARC机的指令系统由于采用了RIS技术,该机器的指令系统只设置了75条指令,还有一些指令并没有选入指令系统,但很容易用指令系统中的指令去替代实现。如表5-5所示,其中,表的左边列出了6条指令,表的右边给出了替代指令及实现方法。(SPARC约定R0的内容恒为0。)
表5-5 RISC指令的替代与实现
关 联
习 题
  5.1 什么叫指令?什么叫指令系统?指令通常有哪几种地址格式?
  5.2 什么叫指令地址?什么叫形式地址?什么叫有效地址?
  5.3 什么叫寻址方式?有哪些基本的寻址方式?简述其寻址过程。
  5.4 基址寻址方式和变址寻址方式各有什么不同?
  5.5 设某机指令长为16位,每个操作数的地址码为6位,指令分为单地址指令、双地址指令和零地址指令。若双地址指令为K条,零地址指令为L条,则最多可有多少条单地址指令?
  5.6 设某机指令长为16位,每个地址码长为4位,试用扩展操作码方法设计指令格式。其中三地址指令有10条,二地址指令有90条,单地址指令有32条,还有若干零地址指令,则零地址指令最多有多少条?
  5.7 设某机字长为32位,CPU有32个32位通用寄存器,有8种寻址方式,包括直接寻址、间接寻址、立即寻址、变址寻址等,采用R-S型单字长指令格式,共有120条指令,试问:
  (1) 该机直接寻址的最大存储空间为多少?
  (2) 若采用间接寻址,则可寻址的最大存储空间为多少?如果采用变址寻址呢?
  (3) 若立即数为带符号的补码整数,试写出立即数范围。
  5.8 一种单地址指令格式如下所示,其中I为间接特征,X为寻址模式,D为形式地址。I、X、D组成该指令操作数的有效地址E。设R为变址寄存器,R1为基址寄存器,PC为程序计数器,请在下表中第一列位置填写适当的寻址方式。
5.9 简述RISC的主要特点。
5.10 选择题。
(1) 计算机系统中,硬件能够直接识别的指令是( )。
A. 机器指令 B. 汇编语言指令
C. 高级语言指令 D. 特权指令
(2) 指令系统中采用不同的寻址方式的主要目的是( )。
A. 增加内存的容量
B. 缩短指令长度,扩大寻址范围
C. 提高访问内存的速度
D. 简化指令译码电路
  (3) 在相对寻址方式中,若指令中地址码为X,则操作数的地址为( )。
A. X B. (PC)+X C. X+段基址 D. 变址寄存器+X
  (4) 在指令的地址字段中直接指出操作数本身的寻址方式称为( )。
A. 隐含地址 B. 立即寻址 C. 寄存器寻址 D. 直接寻址
  (5) 在一地址指令格式中,下面论述正确的是( )。
  A. 只能有一个操作数,它由地址码提供
  B. 一定有两个操作数,另一个是隐含的
  C. 可能有一个操作数,也可能有两个操作数
  D. 如果有两个操作数,另一个操作数一定在堆栈中
  (6) 在变址寄存器寻址方式中,若变址寄存器的内容是4E3CH,给出的偏移量是63H,则它对应的有效地址是( )。
  A. 63H B. 4D9FH C. 4E3CH D. 4F9FH
  (7) 程序控制类指令的功能是( )。
  A. 进行算术运算和逻辑运算
  B. 进行主存与CPU之间的数据传送
  C. 进行CPU和I/O设备之间的数据传送
  D. 改变程序执行的顺序
(8) 算术右移指令执行的操作是( )。
  A. 符号位填0,并顺次右移1位,最低位移至进位标志位
  B. 符号位不变,并顺次右移1位,最低位移至进位标志位
  C. 进位标志位移至符号位,顺次右移1位,最低位移至进位标志位
  D. 符号位填1,并顺次右移1位,最低位移至进位标志位
(9) 下列几项中,不符合RISC指令系统特点的是( )。
  A. 指令长度固定,指令种类少
  B. 寻址方式种类尽量多,指令功能尽可能强
  C. 增加寄存器的数目,以尽量减少访存次数
  D. 选取使用频率最高的一些简单指令以及很有用但不复杂的指令
5.11 填空题。
(1) 一台计算机所具有所有机器指令的集合称为该计算机的_______。它是计算机与_______之间的接口。
(2) 在指令编码中,操作码用于表示_______,n位操作码最多可以表示_______条指令。地址码用于表示_______。
(3) 在寄存器寻址方式中,指令的地址码部分给出的是_______,操作数存放在_______。
(4) 采用存储器间接寻址方式的指令中,指令的地址码字段中给出的是_______所在的存储器单元地址,CPU需要访问内存_______次才能获得操作数。
(5) 操作数直接出现在指令的地址码字段中的寻址方式称为_______寻址;操作数所在的内存单元地址直接出现在指令的地址码字段中的寻址方式称为_______寻址。
5.12 判断题。
(1) 利用堆栈进行算术/逻辑运算的指令可以不设置地址码。( )
(2) 指令中地址码所指定的寄存器中的内容是操作数有效地址的寻址方式称为寄存器寻址。( )
(3) 一条单地址格式的双操作数加法指令,其中一个操作数来自指令中地址字段指定的存储单元,另一个操作数则采用间接寻址方式获得。( )
(4) 在计算机的指令系统中,真正必需的指令种类并不多,很多指令都是为了提高机器速度和便于编程而引入的。( )
(5) RISC系统的特征是使用了丰富的寻址方式。( )

展开更多......

收起↑

资源预览