第二章 指令系统


2.4.2 指令系统的性能

  指令系统的性能主要包括规整性、高效率和兼容性。
  指令系统的规整性设计,是硬件设计(如VLSI技术)和软件设计(如编译程序等)的需要。尽可能减少,甚至不出现任何例外情况和特殊用法,让所有运算部件都能对称、均匀地在所有数据存储单元(如主存储器、通用寄存器和堆栈)之间进行操作,对所有数据存储单元都能同等对待,无论是操作数或是运算结果都可以无任何约束地存放在任意数据存储单元中。
  规整性主要包括对称性和均匀性。对称性是指各种与指令系统有关的数据存储设备的使用,操作码的设置等都要对称。例如,所有通用寄存器要同等对待。这一点在目前的许多计算机系统中都没有做到,往往隐含规定某一个或某几个通用寄存器有特殊的用途。在操作码的设置上,如果设置有A-B指令,也应该设置B-A指令,同样,如果有A÷B的指令,也应该有B÷A的指令。对于两个地址码的指令,由于运算结果要破坏掉其中的一个源操作数,即使是加法、乘法等指令最好也设置两种,如A+BA和A+BB。均匀性是指对于各种不同的数据类型、字长、操作种类和数据存储设备(通用寄存器、主存储器、堆栈及输入输出设备等),指令的设置要同等对待。例如,某机器有5种数据表示(定点数、逻辑数、浮点数、十进制数、字符串),4种字长(单字长、双字长、半字长、字节),8种数据存储设备的有效排列(通用寄存器、主存储器、堆栈及它们之间有用的排列),则设计加法指令时,指令种类应该有:5×4×8=160种两地址加法指令。如果再考虑对称性的要求和不同寻址方式的要求等,指令种类还要增加很多倍,这在实际上很难做到,也是不现实的。
  因此,在设计指令系统时,对于规整性的要求必须有所选择。在RISC(精简指令系统计算机)体系结构中,规定运算型指令都在通用寄存器内进行操作,即使在CISC(复杂指令系统计算机)体系结构中,如果采用二地址通用寄存器结构,通常也规定,两个地址中有一个必须是通用寄存器。另外,对于逻辑数、十进制数、字符串等数据表示,双字长、半字长和字节等数据长度,可以适当减少指令种类。这样,可以把加法指令的种类压缩在10种之内。另外,如果采用自定义数据表示方式,每个数据只要带有几个标志位,规整性问题就不难解决了。
  高效率是指指令的执行速度要快,使用频度要高。在RISC体系结构中,大多数指令都能在一个节拍内做完,而且只设置那些使用频度高的指令。而在CISC体系结构中,有些指令的执行速度非常低,需要几十个节拍才能完成,甚至是不固定节拍的(由所使用的数据决定指令执行所需要的节拍数,如检索、匹配、数据块搬家等指令)。体系结构设计者在设置这些低速度指令时要特别慎重。要考虑是用软件的一段子程序来实现,条还是用硬件的一条指令来实现。对于那些使用频度比较低的指令,也要尽量少设置。在考虑指令的实现方法时,对于那些比较复杂,又必须设置的指令,可以采用微程序来实现,以减少硬件的复杂程度。总之,指令系统的设计要做大量的统计和模拟的工作,要在反复比较的基础上才能最后确定下来。
  兼容性是计算机系统的生命力之所在。没有兼容性,大量的系统软件和更大量的各种应用软件就无法继承,计算机也就没有了市场。因此,在设计指令系统时,兼容性是必须考虑的。