指令系统的设计

  • 区别不同指令系统结构的主要因素:CPU中用来存储操作数的存储单元的类型。
  • CPU中用来存储操作数的存储单元:堆栈、累加器、通用寄存器组。
  • 指令系统的结构分为三种类型:堆栈结构、累加器结构、通用寄存器结构。
  • 对于不同类型的结构,操作数的位置、个数以及操作数的给出方式(显式或隐式)也会不同。操作数的给出方式为:显式给出(用指令字中的操作数字段给出)、隐式给出(使用事先约定好的单元)。
  • ALU指令的操作数个数
    • 3个操作数的指令:两个源操作数、一个目的操作数
    • 2个操作数的指令:其中一个操作数既作为源操作数,又作为目的操作数。
  • ALU指令中存储器操作数的个数可以是0~3中的某一个,为0表示没有存储器操作数。
  • 通用寄存器型结构进一步细分为3种类型寄存器-寄存器型(RR型)(操作数可以来自存储器 )、寄存器-存储器型(RM型)(所有操作数都是来自通用寄存器组) 、存储器-存储器型(MM型)。
  • 3种通用寄存器型结构的优缺点(m,n)表示指令的n个操作数中有m个存储器操作数):
    • 寄存器-寄存器型(0,3)
      • 优点:指令字长固定,指令结构简洁,是一种简单的代码生成模型,各种指令的执行时钟周期数相近。
      • 缺点:与指令中含存储器操作数的指令系统结构相比,指令条数多,目标代码不够紧凑,因而程序占用的空间比较大。
    • 寄存器-存储器型(1,2)
      • 优点:可以在ALU指令中直接对存储器操作数进行引用,而不必先用load指令进行加载。容易对指令进行编码,目标代码比较紧凑。
      • 缺点:指令中的两个操作数不对称。在一条指令中同时对寄存器操作数和存储器操作数进行编码,有可能限制指令所能够表示的寄存器个数。指令的执行时钟周期数因操作数的来 源(寄存器或存储器)不同而差别比较大。
    • 存储器-存储器型(2,2)或(3,3)
      • 优点:目标代码最紧凑,不需要设置寄存器来保存变量。
      • 缺点:指令字长变化很大,特别是3操作数指令。而且每条指令完成的工作也差别很大。对存储器的频繁访问会使存储器成为瓶颈。这种类型的指令系统结构现在已不用了。
  • RR也称为load-store结构,这个名称强调:只有load指令和store指令能够访问存储器。
  • 寻址方式:指令系统中如何形成所要访问的数据的地址。
  • 寻址方式可以指明指令中的操作数是一个常数、一个寄存器操作数或者是一个存储器操作数。
  • 对于存储器操作数来说,由寻址方式确定的存储器地址称为有效地址。
  • 两种表示寻址方式的方法:
    • 将寻址方式编码于操作码中,由操作码描述相应操作的寻址方式;
    • 在指令字中设置专门的寻址字段,用以直接指出寻址方式。
  • 指令系统的设计包括:指令的功能设计、指令格式的设计。
  • 在确定哪些基本功能用硬件来实现时,主要考虑3个因素:速度、成本、灵活性。
  • 对指令系统的基本要求完整性、规整性、正交性、高效率、兼容性。
    • 完整性:在一个有限可用的存储空间内,对于任何可解的问题,编制计算程序时,指令系统所提供的指令足够使用。
    • 规整性:主要包括对称性和均匀性。
    • 正交性:在指令中各个不同含义的字段,如操作类型、数据类型、寻址方式字段等,在编码时应互不相关、相互独立。
    • 高效率:指指令的执行速度快、使用频度高。
    • 兼容性:主要是要实现向后兼容,指令系统可以增加新指令,但不能删除指令或更改指令的功能。
  • 在设计指令系统时,有两种截然不同的设计策略:
    • CISC(复杂指令系统计算机)
      • 增强指令功能,把越来越多的功能交由硬件来实现,并且指令的数量也是越来越多。
    • RISC(精简指令系统计算机)
      • 尽可能地把指令系统简化,不仅指令的条数少,而且指令的功能也比较简单。
  • 控制指令是用来改变控制流的。
  • 跳转:当指令是无条件改变控制流时,称之为跳转指令。
  • 分支:当控制指令是有条件改变控制流时,则称之为分支指令。
  • 能够改变控制流的指令:分支、跳转、过程调用、过程返回。
  • 指令由两部分组成:操作码、地址码。
  • 指令格式的设计:
    • 确定指令字的编码方式,包括操作码字段和地;
    • 址码字段的编码和表示方式。
  • 指令格式的优化:如何用最短的位数来表示指令的操作信息和地址信息。
  • 构造哈夫曼树的方法 :
    • 将各事件按其使用频度从小到大依次排列 。
    • 每次从中选择两个频度值最小的结点,将其合并成一个新的结点,并把新结点画在所选结点的上面, 然后用两条边把新结点分别与那两个结点相连。
    • 新结点的频度值是所选两个结点的频度值的和。
    • 把新结点与其他剩余未结合的结点一起,再以上面的步骤进行处理,反复进行,直到全部结点都结合完毕、形成根结点为止。
  • 操作码优化的程度可以用信息熵来衡量。
  • 指令系统的设计_第1张图片
  • 表示用二进制编码表示n个码点时,理论上的最短平均编码长度 。哈夫曼编码的平均码长是
  • 指令系统的设计_第2张图片
  • 信息冗余量为
  • 指令系统的设计_第3张图片
  • 扩展操作码
    • 位于定长二进制编码和哈夫曼编码之间的一种编码方案。
    • 采用有限几种固定长度的码长,仍然采用高概率的用短码、低概率用长码的哈夫曼压缩思想,使操作码平均长度缩短。
  • 指令系统的3种编码格式可变长度编码格式、固定长度编码格式、混合型编码格式。
  •  CISC指令系统的一大特点;指令数量多、功能多样。
  • 设计RISC机器遵循的原则 :
    • 指令条数少、指令功能简单。只选取使用频度很高的指令,在此基础上补充一些最有用的指令;
    • 采用简单而又统一的指令格式,并减少寻址方式;指令字长都为32位或64位;
    • 指令的执行在单个机器周期内完成;(采用流水线机制)
    • 只有load和store指令才能访问存储器,其它指令的操作都是在寄存器之间进行;(即采用load-store结构)
    • 大多数指令都采用硬连逻辑来实现;
    • 强调优化编译器的作用,为高级语言程序生成优化的代码;
    • 充分利用流水技术来提高性能。
  • 数据表示:计算机硬件能够直接识别、指令系统可以直接调用的数据类型。
  • 数据结构:由软件进行处理和实现的各种数据类型。
  • 操作数的大小:操作数的位数或字节数。主要的大小:字节(8位)、半字(16位)、字(32位)、和双字(64位)。
  • MIPS的寄存器
    • 32个64位通用寄存器(GPRs)R0,R1,…,R31,也称为整数寄存器,R0的值永远是0。
    • 32个64位浮点数寄存器(FPRs)F0,F1,…,F31,用来存放32个单精度浮点数(32位)或个双精度浮点数(64位)。存储单精度浮点数(32位)时,只用到FPR的一半,其另一半没用。
    • 浮点状态寄存器:用来保存有关浮点操作结果的信息。
  • MIPS的数据表示:整数(字节(8位)、半字(16位)、字(32位)、双字(64位))、浮点数(单精度浮点数(32位)、双精度浮点数(64位))。
  • MIPS指令可以分为四大类:load和store,ALU操作,分支与跳转,浮点操作。

转载于:https://www.cnblogs.com/waitingsky/archive/2012/03/03/PCInstructionDesign.html

你可能感兴趣的:(指令系统的设计)