第二章(P124)

2.13 一个处理机共有10条指令,各指令在程序中出现的概率如下表:    

指令序号

出现的概率

Huffman编码

2/8扩展编码法

3/7扩展编码法

I1

0.25

10

00

00

I2

0.20

00

10

01

I3

0.15

110

1000

10

I4

0.10

010

1001

11000

I5

0.08

1110

1010

11001

I6

0.08

0110

1011

11010

I7

0.05

0111

1100

11011

I8

0.04

11110

1101

11100

I9

0.03

111110

1110

11101

I10

0.02

111111

1111

11110

操作码的平均长度 H

2.99

3.1

3.2

操作码的信息冗余量 R

1.10%

4.61%

7.59%


(1)采用最优Huffman编码法计算机这10条指令的操作码最短平均长度。

(2)采用Huffman编码法编写这10条指令的操作码,并计算机操作码,并计算机操作码的平均长度,计算机与最优Huffman编码法相比的操作码信息冗余量。把得到的操作码编码和计算机的结果填入上面的表中。

(3)采用2/8扩展编码法编写这10条指令的操作码,并计算机操作码,并计算机操作码的平均长度,计算机与最优Huffman编码法相比的操作码信息冗余量。把得到的操作码编码和计算机的结果填入上面的表中。

(4)采用3/7扩展编码法编写这10条指令的操作码,并计算机操作码,并计算机操作码的平均长度,计算机与最优Huffman编码法相比的操作码信息冗余量。把得到的操作码编码和计算机的结果填入上面的表中。

解:

2)采用Huffman编码:

平均长度:H1=(0.25+0.20)*2+(0.15+0.10)*3+(0.08+0.08+0.05)*4+0.04*5+(0.03+0.02)*6=2.99

信息冗余量:R1=1-2.9566/2.99=0.0112=1.12%

(3)2/8扩展编码是8/64/512法的变种,第一组2条指令,码长为2(1位扩展标志,1位编码),第二组8条指令,码长为4(1位扩展标志,与第一组区别,加3位编码):

平均长度H2=(0.25+0.20)*2+(0.15+0.10+0.08+0.08+0.05+0.04+0.03+0.02)*4=3.1

信息冗余量:R2=1-2.9566/3.1=0.0463=4.63%

(4)3/7扩展编码是15/15/15法的变种,第一组3条指令,码长为2(共有4种组合,其中3种组合分别代表3条指令,留1种组合作为扩展前缀标志),第二组7条指令,码长为5(2位固定的前缀扩展标志,与第一组区别,加3位编码,只用其中7种组合:

平均长度:H3=(0.25+0.20+0.15)*2+(0.10+0.08+0.08+0.05+0.04+0.03+0.02)*5=3.2

信息冗余量:R3=1-2.9566/3.2=0.0761=7.61%

2.14 一台模型机共有7条指令,各指令的使用频率分别为35%,25%,20%,10%,5%,3%和2%,有8个通用数据寄存器,2个变址寄存器。

(1)要求操作码的平均长度最短,请设计操作码的编码,并计算所设计操作码的平均长度。

(2)设计8字长的寄存器-寄存器型指令3条,16位字长的寄存器-存储器型变址寻址方式指令4条,变址范围不小于±127。请设计指令格式,并给出各字段的长度和操作码的编码。

解:

(1)出现不同的频率因此是:

HUffman编码:

//最小两权先内聚,和值大于集合外,必有集合外内聚

//左0 右 1

p_w_picpath

huffman编码:

操作码:

设计8位字长的寄存器-寄存器型变址寻址方式指令如下,因为只有8个通用寄存器,所以寄存器地址需3位,操作码只有两位,设计格式如下:    

2

3

3

操作码OP

源寄存器R1

目的寄存器R2


三条指令的操作码分别为00,01,10

(2)设计8位字长的寄存器-寄存器型变址寻址方式指令如下,因为只有8个通用寄存器,所以寄存器地址需3位,操作码只有两位,设计格式如下:  

2

3

3

操作码OP

源寄存器R1

目的寄存器R2


三条指令的操作码分别为00,01,10

设计16位字长的寄存器-存储器型变址寻址方式指令如下:  

4

3

1

8

操作码OP

通用寄存器

变址寄存器

偏移地址


四条指令的操作码分别为1100,1101,1110,1111

2.15

某处理机的指令字长为16位,有双地址指令、单地址指令和零地址指令三类,并假设每个地址字段的长度均为6位。

(1)如果双地址指令有15条,单地址指令和零地址指令的条数基本相同,问单地址指令和零地址指令各有多少条?并且为这三类指令分配操作码。

(2)如果要求三类指令的比例大致为1:9:9,问双地址指令、单地址指令和零地址指令各有多少条?并且为这三类指令分配操作码。

:(1)A.根据指令地址的数量来决定各种指令在指令空间上的分布:按照从小到大的顺序分配操作码,指令数值从小到大的顺序,分别为双地址指令、单地址指令和零地址指令。

B.根据指令的条数来大致的估计操作码的长度:双指令15条,需要4位指令来区分,剩下的12位指令平均分给单地址和零地址指令,每种指令可以用6位指令来区分。

各指令的条数为:

p_w_picpath

0~15=2^4:

单:双=1:1

双地址指令15条,操作码:0000~1110;

单地址指令26-1=63条,操作码:1111 000000~1111 111110;

零地址指令64条,操作码:1111 111111 000000~1111 111111 111111。

(2)与上面的分析相同,可以得出答案:

双地址指令14条,操作码:0000~1101;

单地址指令26 x 2-2 = 126条:

1110 000000~1110 111110,

1111 000000~1111 111110;

零地址指令128条:

1111 111111 000000~1111 111111 111111