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
|