计算机系统结构(二)

第二章

  1. 指令系统结构的分类

    2.1.1 指令系统的主要分类

      区别不同指令系统结构的主要因素

        CPU中用来存储操作数的存储单元的类型

      CPU中用来存储操作数的存储单元

      • 堆栈
      • 累加器
      • 通用寄存器

      将指令系统的结构分为三种类型

      • 堆栈结构 
      • 累加器结构
      • 通用寄存器结构

      根据操作数的来源不同,又可进一步分为:

      • 寄存器-存储器结构(RM结构)(操作数来自存储器)
      • 寄存器-寄存器结构(RR结构)(操作数来自通用寄存器)也称为load-store结构,这个名称强调:只有load指令和store指令能够访问存储器。

      对于上述三种不同的指令系统结构的操作数描述方式:操作数的位置,个数以及操作数的给出方式(显式或者隐式)也会有所不同。显式的给出:用指令中的操作数字段给出。隐式的给出:使用事先就约定好的单元。

    2.1.2 通用寄存器型结构

      现代指令系统的主流,在灵活性和提高行能方面有明显的优势,跟其他CPU内部存储单元一样,寄存器的访问速度比存储器快。对于编译器而言,能更加容易些,有效的分配何使用存储器。寄存器可以用来存放变量。减少对寄存器的访问,加快程序的执行速度;(因为寄存器比存储器快)用更少的地址位(相对于存储器地址来说)来对寄存器进行寻址,从而有效的减少目标代码的大小。

      根据ALU指令的操作数的两个特征对通用寄存器型结构进一步细分:

      ALU指令的操作数:

      • 三个操作数(两个源操作数,一个目的操作数)
      • 两个操作数的指令其中一个操作数即为源操作数又为目的操作数。
      • ALU操作数的个数可以为0--3中的某一个,为0表示没有存储器操作数

      通用寄存器型结构进一步细分为3种类型

      • 寄存器-寄存器型(RR型)
      • 寄存器-存储器型(RM型)
      • 存储器-存储器型(MM型)

      

  2.寻址方式

    2.2.1寻址方式的定义

      寻址方式:指令系统中如何形成所要访问的数据的地址。寻址方式可以指明指令系统中的操作数或者一个寄存器操作数或者是一个寄存器操作数。对于存储器来说,由寻址方式确定的存储器的地址称为有效地址。

      一些操作数的寻址方式

        <--:赋值操作

        Mem:存储器

        Regs:寄存器组

        方括号:表示内容

          Mem[]:存储器内容

          Regs[]:寄存器内容

          Mem[Regs[R1]]:以寄存器R1中的内容作为地址的存储单元中的内容

      

      采用多种寻址方式可以显著地减少程序的指令条数,但可能增加计算机的实现复杂度以及指令的CPI。

      各种寻址方式的使用情况的统计结果:

      

      立即数寻址方式和偏移寻址方式的使用频率最高。

      立即数寻址方式的使用频度

      

      大约1/4的load指令和ALU指令采用了立即数寻址。

    2.2.3 两种表示寻址方式的方法

      将寻址方式编码于操作码中。由操作码描述相应的操作的寻址方式。适合:处理机采用load-store结构,寻址方式只有很少几种。

      在指令字中设置专门的寻址字段,用以直接指出寻址方式。灵活,操作码短,但需要设置专门的寻址方式字段,而且操作码和寻址方式字段合起来所需要的总位数可能会比隐含的总位数多。适合:处理机具有多种寻址方式,且指令有多个操作数。

  3.指令系统的设计与优化

    2.3.1 指令系统的设计的基本原则

      指令系统的设计包括1.指令功能的设计2.指令格式的设计

      主要考虑因素:速度,成本,灵活性

      硬件实现的特点:速度快,成本高,灵活性差

      软件实现的特点:速度慢,价格便宜,灵活性高

      对指令系统的基本要求:完整性,规整性,正交性,高效率,兼容性

      • 完整性:在一个有限可能的存储空间内,对任意客借的问题,编制计算程序时,指令系统所提供的指令足够使用。要求指令系统功能齐全,使用方便。
      • 规整性:主要包括对称性和均匀性
        • 对称性:所有与指令系统有关的存储单元的使用、操作码的设置等都是对称的。
        • 均匀性:指对于各种不同操作数类型、字长、操作种类和数据存储单元,指令的设置都要等同对待。
      • 正交性:在指令中各个不同含义的字段,如操作类型。数据类型寻址方式字段等,在编码时相互关照、相互独立。
      • 高效率:指指令的执行速度快,使用频率高。
      • 兼容性:主要是要实现向后兼容,指令系统可以增加新指令,但不能删除或更改指令的功能。

      在设计指令系统时,有两种截然不同的设计策略产生了两类不同的计算机系统:

       CISC(复杂指令系统计算机)

      • 增强指令功能,把越来越多的功能交由硬件来实现,并且指令的数量也是越来越多。

       RISC(精简指令系统计算机)

      • 尽可能的把指令系统简化,不仅指令数量少,而且指令的功能也比较简单

     2.3.2控制指令 

       控制指令是用来改变控制流的。

      • 跳转:当指令是无条件改变控制流时,称之为跳转指令。
      • 分支:当控制指令是有条件改变控制流时,则称之为分支指令。

       控制指令的使用频率(load-store型指令系统结构的机器,基准程序为SPEC CPU2000)  

       

       改变控制流的大部分指令是分支指令(条件转移)。

       分支条件的方法及其优缺点

       

       转移目标地址的表示,最常用的方法:在指令中提供一个偏移量,由该偏移量和程序计数器(PC)的值相加而得出目标地址。(PC相对寻址)

      • 优点:有效的减少该目标地址所需要的位数,位置无关(代码可被装载到主存的任意位置执行)
      • 关键:确定偏移量字段的长度,模拟器结果表明:采用4--8位的偏移量字段(以指令字为单位)就能表示大多数控制指令的转移目标地址了。

       过程调用和返回

      • 除了要改变控制流之外,可能还要保存机器状态。至少也得保存返回地址(放在专用的链接寄存器或堆栈中)。
      • 过去有些指令系统的结构提供了专门的保存机制来保存许多寄存器内容。
      • 现在较新的指令系统结构则要求由编译器生成load和store指令来保存或恢复寄存器的内容。

     2.3.3指令操作码的优化

       指令的组成:由两部分组成:操作码,地址码(地址信息)

         操作码包括:操作种类、操作数的描述

         操作种类:加减乘除,数据传送,移位转移,输入输出,程序控制,处理机制控制等

       操作数描述:主要有,数据的类型,数据字长类型。

       指令格式的设计:确定指令字的编码方式,包括操作码字段和地址码字段的编码和表示方式。  

       指令格式的优化:如何用最短的位数来表示指令的操作信息和地址信息。

       基于哈夫曼编码指令操作码的优化的基本思想:

         当各种事件发生的概率不均等时,可以发生概率最高的事件用最短的位数(时间)来表示(处理),而对于出现概率较低的事件,则可以用较长的位数(时间)来表示(处理),从而使总的平均位数(时间)缩短,节省程序空间。

      • 固定长操作码:就是需哦有指令使用相同的代码位数,其最小码长等于:
        • L=li=[log2N]   ;式中L是平均码长,li是第i种指令的码长,n是指令总数。
        • 优点:规整,译码简单。
        • 缺点:浪费信息量。

       huffman编码法:

         基本原理:当用n个长度不等的代码分别代表n种发生概率不等的事件时,按照短代码给高概率事件、把长代码给低概率事件的原则分配,可使平均码长达到最低。

        • 使用频度高的指令,短编码
        • 使用频度低的指令,长编码

         1.要采用哈夫曼编码法表示操作码,必须知道各种指令在程序运行过程中的出现的概率,通常可以通过已有的典型的程序统计得知。

       最优haffman编码:

         根据Huffman编码法的原理,采用最优编码法表示的操作码的最短平均长度可以通过如下的计算,也就是操作码优化的程度可以用信息熵来衡量:

          

         固定长的操作码相对于最优的哈夫曼的操作码的冗余量为:

          

       构造哈夫曼树的方法

        • 将各事件使用频度从小到大排列 
        • 每次从中选择两个频度最小的节点,将其合并成一个新的节点,并把新的节点画在所选节点的上面。
        • 然后用两条边把新的节点分别于那两个节点相连(新节点的频度值为所选节点的频度值之和)
        • 把新的节点与其他剩余的未结合的节点一起,在以上述的步骤进行处理,反复进行直到全部的节点都结合完毕,形成根节点。 

       实际上,操作码不可能达到最右编码的法的最短平均长度。利用哈夫曼树进行操作码编码的方法,又称为最小概率合并法。把所有指令按照操作码在程序中的出现的概率,自左向右,从大到小排列,每条指令是一个节点。             

                                  

          

       

      

                                     

猜你喜欢

转载自www.cnblogs.com/Jaiken/p/8971235.html