操作码的编码方法通常有三种:固定长度操作码、哈夫曼编码方法和扩展编码方法。
  一般处理机的指令条数通常为几十条至几百条,用一个字节(8位)表示,非常规整,硬件译码也很简单。IBM公司生产的许多大中型计算机,许多RISC(精简指令系统计算机)体系结构都采用这种编码方法。
  固定长操作码的主要缺点是:浪费了许多信息量,即操作码的总长度增加了,从表3.1中可以看到,操作码的总长度要增加40%左右。

定义  1.哈夫曼(Huffman)编码法
  哈夫曼编码法:哈夫曼编码法是1992年由Huffman首先提出的一种编码方法,开始主要用于电报报文的编码。如26个英文字母中,e、t等的使用频率最高,用短码表示;q、x等的使用频率很低,用长码表示。这样,可以缩短整个报文的长度,减少报文的传送时间。Huffman编码法也可以用在其它许多地方,如存储空间压缩、时间压缩等。
  要采用哈夫曼编码法表示操作码,必须先知道各种指令在程序中出现的概率,这要通过对已有典型程序进行统计得到。
  根据哈夫曼编码法的原理,操作码的最短长度可以通过如下公式计算:
    
Pi表示第i种操作码在程序中出现的概率,一共有n种操作码。
  如果采用固定长操作码,n种操作码共需要 个二进制位,因此,固定长度操作码的信息冗余量为:
   
  下面,我们通过一个例子来说明采用哈夫曼编码法来优化操作码的具体做法,并计算操作码的平均长度和信息冗余量。
  例3.2:假设一台模型计算机共有7种不同的操作码。如果采用固定长度操作码表示,需要3位操作码。如果采用哈夫曼编码法,首先要知道各种操作码在程序中出现的概率,如表3.2所示。操作码的最短长度为:
    
把表3.2中的数据代入上面的公式,得到操作码的最短长度:
   H=0.45×1.152+0.30×1.737+0.15×2.737+0.05×4.322
    +0.03×5.059+0.01×6.644+0.01×6.644
   =1.95
表3.2 模型机的操作码哈夫曼编码法

  如果采用3位固定长操作码,信息的冗余量为35%。
    
  然而,我们可以利用哈夫曼算法,通过构造哈夫曼树对操作码进行编码。上面这个例子的具体编码过程如图3.1所示。
图3.1 利用哈夫曼树进行操作码编码