1.指令系统的发展
(1)一条发展路径为:增强指令的功能和数目,缩小与高级语言的语义差异,简化编译器设计,同时硬件复杂度提升。基于VLSI(超大规模集成电路),发展出了复杂指令集计算机CISC(Complex Instruction Set Computer)。
缺点:编程实践中的80%-20%规律:程序执行时用到的80%的指令,是指令系统中20%的指令。CISC设计复杂、开发成本高。
(2)另一条技术路径:RISC(Reduced Instruction Set Computer)精简指令集计算机。其技术特点:只包含必不可少的指令和少数最常用的指令,用20%的指令组合实现不常用的80%的指令的功能,指令长度固定、指令格式种类少、寻址方式少。
2.指令系统概述
一台计算机能够执行的机器指令的集合就是这台计算机的指令系统。计算机设计者的重要工作之一为设计指令系统,计算机的使用者根据每一条指令的功能,来操纵计算机。
机器指令格式:操作码字段 + 地址码字段
操作码:位数反映指令数目,内容反映机器做什么操作。可分为长度固定(如RISC及其,指令规整,译码简单)和长度可变(操作码分散在指令字的不同字段中,控制器设计相对复杂)两类。
地址码:用来指定该指令操作数的地址(源操作数)、结果的地址(目的操作数)、以及(可能有的)下一条指令的地址。
操作码扩展技术:通过操作码扩展(对应的地址码长度收缩)技术,能够有效缩短指令的平均长度。
例1:假设我们只需要5条指令。如果采用长度固定操作码,要用3位;如果采用变长操作码,我们把00,01,10作为前三条指令,然后用剩下的一个码点(码点就是二进制位的一种组合方式)11作为扩展标志,把下一个位也扩展成操作码,110、111两个指令。平均操作码长度就为2.4位了。
例2:假设一台计算机指令字长16位,操作码和地址码都为四位。请列出几种可能的操作码设计方法。
方法一:前四位做操作码,后十二位做地址码,可得到16位三地址指令。
方法二(扩展方式1):前四位只使用0000到1110共15个码点,得到15条三地址指令;留下的1111码点用来扩展指令,第二个四位我们仍然采用0000到1110共15个码点,得到15条二地址指令;第二个四位又留下一个1111码点,若前八位都为1,此时第三个四位也作为操作码,我们仍然采用0000到1110共15个码点,获得15条一地址指令;最后若前十二位都为1,做后四位也作为操作码,得到16条零地址指令。
方法三(扩展方式2):前四位采用0000到1110共15个码点,得到15条三地址指令;第二个四位采用0000到1101共14个码点,获得14个二地址指令;若第二个四位为1110,采用第三个四位的16个码点,得到16条一地址指令;若第二个四位为1111,采用第三个四位的15个码点,又得到15条一地址指令;最后若前12位都为1,后四位也被扩展成操作码,得到16条零地址指令。
所以可以看到,扩展操作码的方式设计巧妙,方法不唯一,根据需要进行设计。
指令字长:
指令字长取决于操作码的长度、地址码的长度、地址码的个数。指令字长可分为固定和可变两类。固定:指令字长通常等于存储字长,一次访存;可变:按字节的倍数变化。多字长指令需要多次访存,所以我们设计计算机指令系统的时候,应该让使用最频繁的指令的字长最短。