zoukankan      html  css  js  c++  java
  • 关于指令操作码的优化的理解

        指令一般都是由两部分组成:操作码和操作地址。

        在计算机大量的指令当中有着“二·八”定则,指的是有着20%的指令在80%的时间里重复使用着,而80%的指令只有20%的时间在使用着。

        那么为了提高计算机的工作效率,在指令的调用上,要想办法把那20%的指令尽可能的放在近的地方,而那剩下的指令可以放在稍微远一些的地方,因此,赫夫曼编码出现了。

    1.赫夫曼编码

        赫夫曼(Huffman)编码的基本思想:当各种事件发生的概率不均等时,可对发生概率高的事件用最短的位数(时间)来表示,而对于出现概率比较短的事件,则可以用较长的位数(时间)来表示,从而使总的平均位数(时间)缩短。

     下面介绍一下关于赫夫曼编码的方法。

        首先要先了解到赫夫曼编码是从下往上的方法构建二叉树。尔其本质就是排序的一种。

        当一串数列放在眼前,就需要对其排列,规则为:永远是数列里面两个最小的加在一起后往上走,且两数相加后如遇到等值数列,则放在其右边。在赫夫曼树中永远是小的放在左边而大的放在右边,路径为左零右一。

        由一道例题来解释说明

        【例题】某台处理机的各条指令使用频度如下表

    指令

    使用频度

    指令

    使用频度

    指令

    使用频度

    ADD

    43%

    JOM

    6%

    CIL

    2%

    SUB

    13%

    STO

    5%

    CLA

    22%

    JMP

    7%

    SHR

    1%

    STP

    1%

    现在对这个频度表进行赫夫曼编码

    先对指令和使用频度进行排序

    从小到大为:SHR 1%    STP 1%    CIL 2%    STO 5%    JOM 6%    JMP 7%    SUB 13%    CLA 22%    ADD 43%

    先进行第一次排序,最小的两个先相加

    image

    现在的排序是 CIL 2%  < 2%  < STO 5% < JOM 6% < JMP 7% < SUB 13% < CLA 22% < ADD 43%

    加起来的值放在等值的右边

    image

    现在的排列是    4% < STO 5% < JOM 6% < JMP 7% < SUB 13% < CLA 22% < ADD 43%

    image

    现在的排序是  JOM 6% < JMP 7% < 9% < SUB 13% < CLA 22% < ADD 43%

    image

    现在的排序是 9% < SUB 13% < 13% < CLA 22% < ADD 43%

    image

    现在的排序是 22% < 35% < ADD 43%

    最终的结果为

    image

    编码为  SHR 100010    STP 100011    CIL 10000    STO 1001    JOM 1100    JMP 1101    SUB 101    CIA 111    ADD 0

    平均码长 = 位长 * 使用频度

     

    2.等长扩展码

        在早期的计算机上,为了便于分级译码,一般采用等长扩展码。常见的扩展码有15/15/15或8/64/512。

        选用哪种编码方法取决于指令使用频度的分部。若在头15指令中值比较大,但在后30中指令中急剧减少,则应该选择15/15/15;若值的头8种指令中较大,之后64中指令也不太低,则使用8/64/512。

    image

    为了方便理解,根据上面那道例题进行练习

    由于上面例题编码不长,不用使用15/15/15

    我们使用3/3/3和2/7来讨论

    3/3/3编码:

    频度最高的放在前面:

    ADD 00    CIA 01    SUB 10    JMP 11 00    JOM 11 01    STO 11 10    CIL 11 11 00    STP 11 11 01    SHR 11 11 10

    2/7编码:

    ADD 0 0    CIA 0 1    SUB 1 000    JMP 1 001    JOM 1 010    STO 1 011    CIL 1 100    STP 1 101    SHR 1 110

    3.定长扩展码

        随着计算机存储空间的日益增大,为保证速度和降低译码复杂度,现很多计算机都采用了固定长度的操作码,所有指令操作码都是同一长度,这就是空间换时间的概念。

    以上,不足之处请多多指正。

    永远年轻,永远热泪盈眶,永远怀抱希望,永远相信美好的事情即将发生。
  • 相关阅读:
    Android 最简单的基于FFmpeg的移动端例子:Android HelloWorld
    实现简易的android 直播技术
    Android Service和Thread的关系
    Android Fragment 你应该知道的一切
    SQLyog普通版与SQLyog企业版对比分析
    Sqoop异常解决ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: No columns to generate for ClassWriter问题
    SQLyog软件里无法插入中文(即由默认的latin1改成UTF8编码格式)
    Sqoop-1.4.6工具import和export使用详解(官网)
    Sqoop Export原理和详细流程讲解
    Sqoop Import原理和详细流程讲解
  • 原文地址:https://www.cnblogs.com/zxkwdw/p/10692986.html
Copyright © 2011-2022 走看看