第二章(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
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位指令来区分。
各指令的条数为:
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