第二章 指令系统


2.3.3 扩展编码法

  采用Huffman编码法能够使操作码得平均长度最短,信息的冗余量最小。然而,这种编码方法所形成得操作码很不规整。在上面这个例子中,7条指令就有6种不同长度得操作码。这样,既不利于硬件的译码,也不利于软件的编译。另外,它也很难与地址码配合,形成有规则长度的指令编码。
  在许多处理机中,采用了一种新的折中的方法,称为扩展编码法。这种方法是由固定长操作码与Huffman编码法相结合形成的。
  对于上一节中那个有7条指令的模型机的例子,如果采用扩展编码法编排操作码,可以有多种方法。举两个例子,如果要求把操作码最长不得超过5位,则可以采用1-2-3-5扩展编码法。如果要求把操作码最长不得超过4位,则可以采用2-4等长扩展编码法。编码结果如表2.6所示。
  采用1-2-3-5扩展编码法的操作码最短平均长度为:
  H=0.45×1+0.30×2+0.15×3+(0.05+0.03+0.01+0.01)×5
  =2.00
  信息冗余量为:
    
  采用2-4等长扩展编码法的操作码最短平均长度为:
  H=(0.45+0.30+0.15)×2+(0.05+0.03+0.01+0.01)×4
   =2.20
  信息冗余量为:
    

表2.6 模型机的操作码扩展编码法

指令序号
出现的概率
1-2-3-5扩展编码
2-4等长扩展编码
0.45
0
0 1
0.30
10
0 1
0.15
110
1 0
0.05
1110
1 1 0 0
0.03
11110
1 1 0 1
0.01
111110
1 1 1 0
0.01
111111
1 1 1 1

  为了便于实现分级译码,一般采用等长扩展法,例如,操作码按4位、8位、12位,每次加长4位的扩展方法,记作4-8-12扩展法,还有3-6-9扩展法等。当然,也可以根据具体需要,采用每次扩展的位数不等的不等长扩展法。
  对于等长扩展法,因为采用不同的扩展标志还可以有多种不同的扩展方法。例如,对于4-8-12扩展法,有采用保留一个码点标志的15/15/15……扩展法,采用每次保留一个标志位的8/64/512……扩展法等。当然,也可以根据不同的需要,在操作码长度扩展过程中,每次采用不同的扩展标志。
  对于4-8-12等长扩展法中的15/15/15……扩展法和8/64/512……扩展法,操作码的具体编码方法如图2.11所示。
  在设计操作码时,具体采用哪种扩展编码方法,要根据所设计系统中各种指令出现的概论分布情况来决定。例如,某系统中,有15种指令出现的概论值比较大,另15种次之,其余指令出现的概论值很小,这时可采用15/15/15……扩展编码法。如果有8种指令出现的概论值比较大,另64种指令出现的概论值次之,可采用8/64/512……扩展编码法。总之,无论采用哪一种扩展编码方法,衡量的标准是要看这种编码方法的操作码平均长度是否最短,或信息的冗余量是否最小。
  另外,也可以根据所设计计算机系统的具体情况,采用不等长扩展编码方法,例如,采用4-6-10扩展编码法,根据所设计系统中各种指令出现的概论分布情况,可以有很多种编码方法,举例如表2.7所示。

    

表2.7 4-6-10不等长扩展编码法举例


编码方法
各种不同长度操作码的指令种类
总的指令种类
4位操作码
6位操作码
10位操作码
15/3/16
15
3
16
34
8/31/16
8
31
16
55
8/30/32
8
30
32
70
8/16/256
8
16
256
280
4/32/256
4
32
256
292