第二章(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
转载于:https://blog.51cto.com/7050893/1330778