指令格式的优化设计.docx
- 文档编号:16449578
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:23
- 大小:72.47KB
指令格式的优化设计.docx
《指令格式的优化设计.docx》由会员分享,可在线阅读,更多相关《指令格式的优化设计.docx(23页珍藏版)》请在冰点文库上搜索。
指令格式的优化设计
指令格式的优化设计
指令格式的优化设计的目的是用最短的二进制位数表示指令的操作信息和地址信息,使指令的平均字长最短。
指令格式的优化设计,首先根据指令集各指令的使用频度的分布{Pi}对操作码进行优化设计,然后对地址码和寻址方式的表示采取优化措施,使指令格式达到优化。
经过优化设计的指令集减少了程序的总位数,减少了程序运行的时空开销,从而提高了系统的性能。
我们首先讨论操作码的优化编码方法,然后讨论寻址技术,最后,在操作码和地址码优化表示的基础上,说明指令格式的优化设计。
一、操作码的优化设计
1、操作码优化编码的方法
操作码优化编码的方法有三种:
定长编码、哈夫曼编码和扩展编码。
定长编码:
是指所有指令的操作码长度都是相等的.如果有n个需要编码的操作码,定长操作码的位数最少需要log2n位。
哈夫曼编码:
用哈夫曼方法构造哈夫曼树进行编码。
构造哈夫曼树的方法是:
每次从指令集中选出两个使用频度最小的指令,将其频度相加,形成一个节点,称为父节点,将新生成的父节点放到结点集中,从新的节点集中再选两个使用频度最少的节点生成一个新的父节点,直至节点集成为空集,就生成了一棵哈夫曼树。
每个节点的两个分支节点,称为节点,用0和1标识,上面的节点称根节点,下面的节点称为叶节点。
从最上面的根节点到一个叶节点的路径(由0和1组成的序列)就是这个叶节点的哈夫曼编码。
由于哈夫曼编码的码长种类较多。
既不利于硬件对操作码的译码,也很难与地址码配合形成长度规整的指令格式。
因此,实用的操作码编码一般不采用哈夫曼编码而采用扩展编码的方法。
扩展编码:
限定使用少数几种长度码长,使用频度高的码点用短码表示,使用频度低的码点用长码表示。
特别需要指出的是,不是所有的短码都可以作为长码的前缀,即不是任何短码都可以是任何长码的若干位。
否则,编码将会不唯一。
所以,要留下若干个短码作为长码的扩展标志,以便长码在扩展编码时使用。
这是扩展编码“扩展”一词的含义。
扩展编码的两种表示方法。
1)码长表示法,用短横线前后的数字分别表示短码码长和长码码长,例如,2-4-6表示指令操作码的长度有三种,分别是2位、4位、6位.(没有表示三种长度的编码各有多少个码点)。
2)码点数表示法,用斜线前后的数字分别表示短码码点的个数和长码码点的个数,例如,3/4/6表示有三种码长,最短码长的码点个数是3,最长码长的码点个数是4,三种码点的总数是13。
(没有表示各个码点数的码长是多少)。
2、操作码优化编码的评价方法
(1)用平均码长评价编码优化的程度,平均码长为:
其中
是第i种码点的使用频度,
是第i种码点的编码长度。
(2)用位冗余量衡量编码优化的程度,位冗余量为
其中,H称为信息熵(Entropy)
表示用二进制编码表示n个码点时理论上最短平均编码长度。
因此对于任何实际编码得出的平均码长l,都有l〉H,故有0 3、对于同一个频度分布{pi},应用哈夫曼法有可能生成不同的哈夫曼树。 因此,由不同的哈夫曼树得出的各码点的编码不相同.也就是说,从频度分布{pi}得出的哈夫曼编码并不唯一。 但,计算得到的平均码长l肯定是唯一的. 根据实现编码的码点个数的要求,在采用扩展编码方法进行优化编码时,选用几个短码作为长码扩展码标志的原则: 一是根据需要编码的短码的码点个数和长码码点个数进行选择,二是尽量减少编码可表示的冗余码点的个数.总之,应尽可能达到平均码长l最短的优化要求。 例1: 一个处理机共有I1~I10共10条指令,经统计各指令在程序中的使用频率分别为: p1=0。 25p2=0.20p3=0.15p4=0。 10p5=0。 08 p6=0。 08p7=0。 05p8=0.04p9=0。 03p10=0.02 (1)计算该10条指令的操作码编码的最短平均码长; (2)写出该10条指令的操作码的哈夫曼编码,并计算该种编码的平均码长和位冗余量; (3)采用3/7扩展编码和2/8扩展编码编写该10条指令的操作码,并分别计算平均码长和位冗余量。 问哪一种扩展编码较好? 说明其理由。 解: (1)由给出的使用频率p1~p10,计算I1~I10的操作码编码的最短平均码长: =—(0.25log20。 25+0。 20log20。 20+0。 15log20.15+0。 10log20.10 +0.08log20。 08+0。 08log20.08+0。 05log20.05+0。 04log20。 04+ 0.03log20.03+0。 02log20.02) =2。 96位 所以,这十条指令的操作码编码的最短平均码长为2。 96位。 (2)根据给出的使用频度,在用哈夫曼编码算法构造哈夫曼树的过程中,在选两个频度最小的节点合并时,有时有两个以上的节点可供选择,因此就会生成结构不同的哈夫曼树。 这里给出了两个哈夫曼树。 如下图: 由哈夫曼树得到的两种哈夫曼编码如下表: Ii pi 哈夫曼编码(a) 码长Iai 哈夫曼编码(b) 码长Ibi I1 0.25 00 2 10 2 I2 0。 20 10 2 00 2 I3 0。 15 010 3 110 3 I4 0.10 110 3 010 3 I5 0.08 0110 4 1110 4 I6 0。 08 1110 4 0110 4 I7 0.05 01110 5 0111 4 I8 0。 04 01111 5 11110 5 I9 0。 03 11110 5 111110 6 I10 0。 02 11111 5 111111 6 可见哈夫曼编码是不唯一的。 两种哈夫曼编码的平均码长为: =0。 25*2+0.20*2+0.15*3+0。 10*3+0.08*4+0.08*4+0.05*5+0.04*5+0.03*5+0。 02*5 =2。 99位 =0.25*2+0.20*2+0。 15*3+0.10*3+0.08*4+0。 08*4+0.05*4+0.04*5+0。 03*6+0.02*6 =2.99位 可见,尽管哈夫曼编码不同,而平均码长却是唯一的。 两种哈夫曼编码的位冗余量分别为: 显然,Ra=Rb (3)3/7扩展编码和2/8扩展编码如下表所示: Ii pi 3/7扩展编码 码长Iai 2/8扩展编码 码长Ibi I1 0.25 00 2 00 2 I2 0.20 01 2 01 2 I3 0。 15 10 2 1000 4 I4 0.10 11000 5 1001 4 I5 0.08 11001 5 1010 4 I6 0.08 11010 5 1011 4 I7 0.05 11011 5 1100 4 I8 0。 04 11100 5 1101 4 I9 0。 03 11101 5 1110 4 I10 0.02 11110 5 1111 4 3/7扩展编码要求短码码点有3个,长码码点有7个,短码码长取2位,可表示22=4个短码码点。 因此只留一个码点作为扩展标志。 要表示的长码码点有7个,因此要扩展3位,因此有23=8个扩展点可用,故有一个点即有一个长码码点11111未被用到,或称有一个冗余码点。 而采用2/8扩展编码则没有冗余码点。 由此判断,2/8扩展编码优于3/7扩展编码。 但是,准确地评价编码的优劣仍需要比较平均码长。 两种扩展编码的平均码长分别为: I3/7=(0.25+0。 20+0。 15)*2+(0.10+0。 08+0.08+0.05+0。 04+0。 03+0。 02)*5=3。 2位 I2/8=(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/8 二、寻址技术 寻址技术对于指令格式的设计十分重要。 它决定了指令字中如何表示地址码。 寻址技术是指存储数据的空间如何编址和如何寻址的技术。 前者称为编址方式,后者称为寻址方式。 在主机中,可用于存储数据的空间有: CPU中的通用寄存器、主存储器、堆栈和I/O接口中的数据寄存器。 由于这些存储空间的工作速度和存储容量差别很大,因此,采用的编址方式和寻址方式也不同。 1、存储空间的组织方式 存储空间有如下三种组织方式: (1)三个地址空间的组织方式 存储空间的存储单位数量越多,用于存储单位编址的地址码越长。 CPU中的通用寄存器数量较少,I/O寄存器的数量较多,主存储单元的数量大得多。 为了减少指令中用于编址的地址码长度,要对这三个存储空间分别独立编址.三个存储空间的寻址方式也不相同。 对寄存器一般采用直接寻址方式,对主存储器一般采用间接寻址和变址寻址等多种寻址方式,以避免在指令中用长的地址码直接表示主存单元的地址。 (2)两个地址空间的组织方式 CPU的通用寄存器独立编址,I/O寄存器和主存储器统一编址。 统一编址空间的高端地址一般用于I/O接口寄存器的地址。 (3)一个地址空间的组织方式 所有数据存储单位统一编址,地址空间的低端地址是CPU的通用寄存器的地址,高端地址是I/O接口寄存器的地址。 2、地址单位 常用的编址单位有: 字编址,字节编址和位编址。 字编址是指每个编址地址与访问的数据存储单位相一致.字节编址是指每个编址单位都是一个字节。 位编址是指每个编址单位都是一个二进制位. 对CPU通用寄存器的一次读/写访问,要求读出或写入通用寄存器中的是一个字。 因此,通用寄存器按字编址,寄存器的编号就是寄存器的地址码。 主存储器可以按字编址,也可以按字节编址。 按字编址是最容易实现的一种编址方式,在采用按字编址的计算机中,可以设置专门的按字节操作的指令和按位操作的指令,用来实现对存储单元中的指令字节或指令位进行操作。 3、寻址方式 按指令中包含的地址码的个数来分,指令可分为: 零地址指令﹑一地址指令、二地址指令和三地址指令。 根据指令中给出的地址码来查找数据存储单元的方式称为寻址方式。 按指令的寻址空间来分,寻址方式可以分为以下四种: (1)立即数寻址 在指令的地址码位置直接给出操作数,使指令从指令字中获取操作数,不需要访问任何地址空间,指令执行速度很快。 缺点是指令字中的地址码长度有限,使操作数的示数范围较小,示数精度较低. (2)寄存器寻址 若寻址空间是通用寄存器,则采用通用寄存器寻址方式。 由于通用寄存器的工作速度较快,因此寄存器寻址的执行速度较快。 另外,由于通用寄存器的字长比指令中的地址码的长度要大得多,因此,寄存器中的操作数的示数范围和示数精度较大. (3)主存寻址 若寻址空间是主存,则采用主存寻址方式,由于主存的工作速度较慢,因此主存寻址比较费时。 另外,由于主存的容量很大,即主存的存储空间很大,因此主存空间的地址码较长,而指令字中分配给地址码的位数很有限,这种矛盾在二地址指令和三地址指令中更突出。 为了能用有限长度的指令地址码对应相当大的主存空间寻址,在主存寻址方式中要采用间接寻址和变址寻址等寻址方式。 在这些寻址方式中用寄存器存放操作数的主存单元地址,而在指令地址码中给出的是相应的寄存器地址。 指令执行时,先访问指令地址码指定的寄存器,从指定的寄存器中获得主存单位地址,然后再访问该主存单元地址指定的主存单元,从而得到所要用的数据. (4)堆栈地址 由于堆栈中的数据只能先进后出,后进先出,因此对堆栈空间的寻址无需指明地址. 标准的堆栈操作指令没有地址码部分,如: PUSHA PUSHB ADD POPC 三、指令格式优化设计的措施 在操作码优化编码的基础上,结合地址码和寻址方式在指令中的表示,可使指令字格式优化。 指令字格式优化设计的措施主要有: (1)采用扩展编码,以缩短操作码的平均码长。 (2)采用多种寻址方式,诸如基址、变址、相对寻址、寄存器寻址、寄存器间接寻址等多种寻址方式,以缩短需要在指令中表示的地址码长度,但不减少地址码寻址空间的大小. (3)指令集采用零地址、一地址、二地址、三地址等多种地址制,且让常用的短操作码与多地址字段相配合,长操作码与少地址字段相配合。 (4)在同种地址制的若干指令中采用多种地址表示形式,如寄存器-寄存器型,寄存器-主存型,主存-主存型等,让每种地址字段有多种长度,使长度不等的操作码与地址码配合,形成规整(相同)长度的指令字。 (5)保持指令字在存储器中按整数边界存储的前提下,使用多种不同的指令字长度,整数边界存储要求指令字长应是主存存储字长的整数倍。 综合应用上述措施,就可以使指令系统的位冗余量减少,操作数的寻址灵活,操作码的备用码总数增多,有利于对指令系统进行扩充. 为了说明考虑以上各种措施后实现指令字格式优化设计的过程,现举例如下: 例2: 某模型机有9条指令,其使用频度分别为: ADD: 30%SUB: 24%LOD: 6%STD: 7%JMP: 7% SHR: 2%ROL: 3%MOV: 20%STP: 1% 要求: 用两种指令字长,且都用二地址指令。 采用扩展编码,只能用两种操作码码长。 短指令为寄存器-寄存器型,长指令为寄存器-主存型. 设该机器有若干个通用寄存器。 主存地址能变址寻址,宽度为16位,按字节编址,采用按整数边界存储,任何指令都在一个主存周期中取得. (1)仅根据使用频度,不考虑其它要求,设计出哈夫曼编码,并计算平均码长; (2)根据给出的全部要求,设计优化的操作码编码,并计算平均码长; (3)画出该机的两种指令字的格式,标出各字段的位数; (4)该机允许使用多少个可编址的通用寄存器? 变址寻址的最大相对位移量是多少字节? 解: (1)根据频度分布,得出哈夫曼树,如下图: 由哈夫曼树,得出9条指令的哈夫曼树,如下表: Ii 指令 pi 哈夫曼编码 Ii(位) 2-5扩展编码 Ii(位) I1 ADD 30% 10 2 00 2 I2 SUB 24% 00 2 01 2 I3 MOV 20% 01 2 10 2 I4 STO 7% 1100 4 11000 5 I5 JMP 7% 1101 4 11001 5 I6 LOD 6% 1110 4 11010 5 I7 ROL 3% 11110 5 11011 5 I8 SHR 2% 111110 6 11100 5 I9 STP 1% 111111 6 11101 5 哈夫曼编码的平均码长为: (2)根据题目要求,指令有两种字长,主存宽度为16位,按字节编址,采用按整数边界存储,任何指令都在一个主存周期取得,那么,短指令字长只能是8位,长指令字长只能是16位。 指令都用二地址指令: 短指令位寄存器-寄存器型,据此可得出短指令格式为: 操作码 寄存器1 寄存器2 长指令为寄存器-主存型,且主存地址应能变址寻址,可得出长指令格式为: 操作码 寄存器号 变址寄存器 相对位移 |←———主存逻辑地址----→| 在一般的计算机中,变址寄存器就是某一个通用寄存器,所以,变址寄存器字段的位数与寄存器字段的位数相同。 根据题目的要求,指令操作码可采用扩展编码,并只能用两种码长。 从指令使用频度来看,ADD、SUB和MOV的使用频度较高,其余六种指令的使用频度都低得多,因此,短操作码码长应取2位长,可有22=4个码点,用其中三个码点表示这三条指令,余下一个码点作为扩展标志.用一个扩展标志再扩展表示出其余六个操作码,故还需要扩展三位,因此,长操作码码长为5位。 由此,得出九条指令的2-5扩展操作码如上表所示。 2-5扩展编码的平均码长为 (3)由上述分析,可得出短指令格式中各字段的位数为 操作码 寄存器1 寄存器2 |<——--2位-—→|←-——-3位——-—→|←——-3位-—-——-—→| 长指令格式中各字段的位数为: 操作码 寄存器 变址寄存器 相对位移 |←——5位—→|←—-3位-———→|←-———3位----→|←----5位—---→| 由于寄存器的字段长度为3位,因此,该机可使用的可编址通用寄存器的个数最多为23=8个。 由于相对位移长度为5位,因此,访存变址寻址的最大相对位移量为25=32个字节。 练习: 一.某模型机共有7条指令,各指令的使用频度分别为: 35%﹑25%﹑20%﹑10%﹑5%﹑3%﹑2%,共有8个通用寄存器和2个变址寄存器. (1)请设计7条指令的哈夫曼编码,并计算操作码的平均码长。 (2)若要求设计8位长的R—R型指令3条,16位长R—M型变址寻址指令4条,变址范围为-127~+127,请设计指令格式,并给出指令各字段的长度和操作码编码。 解: (1)哈夫曼树如下图所示(略),得到的哈夫曼编码如下表第3列所示,由此得到的7条指令操作码的平均码长为: l=∑pili=2。 35(位) li pi 哈夫曼编码 3/4扩展编码 i1 i2 i3 i4 i5 i6 i7 0。 35 0.25 0。 20 0.10 0。 05 0。 03 0.02 00 01 10 110 1110 11110 11111 00 01 10 1100 1101 1110 1111 (2)3条8位长的r—r型指令的格式如下: 操作码 寄存器1 寄存器2 2位3位3位 由于有8个通用寄存器,所以指令中的寄存器字段应为3位,短操作码字段应有2位,2位码可以表示4个指令码,用其中的3个码点“00”﹑“01”﹑“10”表示3条8位的短指令的操作码,余下1个码点“11"作为长码的扩展标志。 4条16位长的r-m型变址寻址指令的格式为: 操作数 寄存器号 变址寄存器号 相对位移 4位3位1位8位 由于有两个变址寄存器,所以变址寄存器号字段只有1位;由于变址范围是—127~+127,所以相对位移字段为8位: 因此剩下的4位(因为16-3—1—8=4)用来表示操作码,其中2位为扩展标示位,另外扩展的2位刚好表示4条指令的操作码。 采用上述3/4扩展遍码时,使用频率高的指令用短码表示,使用频率低的用长码表示,得到的3/4扩展遍码如上表第4列所示。 二.★为了显示不同指令系统的性能, 1。 请用 (1)三地址指令系统处理机; (2)二地址指令系统处理机; (3)二地址多通用寄存器指令系统处理机; (4)一地址(累加器)指令系统处理机; (5)零地址指令系统处理机; 分别写出计算下式x数值的五个程序,程序都用直接方式寻址,并设数据a~g都已经存放在主存相应的存储单元中,计算结果存放在x单元中. X={[a+b]*C+E*D}/{F—G}。 2.设操作码(p=1b)为8位﹑存储单元地址码(a=2b)为16位﹑一个数据(d=4b)为32位﹑一个通用寄存器地址(r=0.5b)为4位。 (1)分别统计五个程序的指令条数; (2)分别统计五个程序的访存次数,其中包括存取指令和读取操作数的访存次数; (3)分别统计五个程序指令所用的存储空间(因为不同程序中用的存储空间大致相同,所以不必统计); (4)分别统计五个程序的访存信息量(即所有访存操作所存取的指令和数据的字节数的总和). 3。 将五个程序按所用的存储空间大小和访存信息量排队,说明5种指令系统的程序运行时的时空开销。 解: 1。 计算x数值的五个程序: (1)三地址指令系统编写的程序为: 1ADDX,a,B;X中暂存 2mulx,X,c;X中暂存 3muly,d,e;Y中暂存 4addx,x,Y;X中暂存 5suby,f,g;Y中暂存 6divx,x,Y;X中存 (2)二地址指令系统的程序为: 1moveX,a 2addx,b 3mulx,c 4moveY,d 5muly,e 6addx,Y 7movey,f 8subx,Y 9divx,Y (3)二地址多通用寄存器指令系统的程序为: 1mover1,a 2addr1,b 3mulr1,c 4mover2,d 5mulr2,e 6addr1,r2 7mover2,f 8subr2,g 9divr1, 10movex,r1 (4)一地址(累加器)指令系统的程序为: 1loadf 2subg 3storex 4loada 5addb 6mulc 7storey 8loadd 9mule 10addy 11divx 12storex (5)零地址指令系统的程序为: 1pusha 2pushb 3add 4pushc 5mul 6pushd 7pushe 8mul 9add 10pushf 11pushg 12sub 13div 14poP 2。 五个程序的指令条数﹑访存次数和访存信息量 (1)用三地址指令编的程序共用6条指令,每条指令含1个操作码,2个源操作数地址和1个目的操作数地址,每条指令的字长为P+3A=1B+3*2B=7B.程序所用的存储量为6*7B=42B。 每条指令需4次访存: 其中取指令访存1次,访存信息量为7b;取2个源操作数需访存2次,访存信息量为2d=284b=8b;存计算结果访存1次,访存信息量为1d=4b.所以,执行一条指令的访存信息量为7b+8b+4b=19b。 执行整个程序的访存信息量为6*19b=114b. (2)用二地址指令编的程序共用9条指令,每条指令含1个操作码,2个源操作数地址且第1个源操作数地址也是目的操作数地址;或者是1个是源操作数地址一个是目的操作数地址。 每条指令的字长为P+2A=1B+2*2B=5B.程序所用的存储量为9*5B=45B。 前者每条指令所需访存读/写操作数的次数如下表所示。 程序执行的访存信息量包括: 取9条指令的访存信息量9*5b=45b;15次取源操作数的访存信息量15*4b=60b;9次存结果数据的访存信息量9*4b=36b。 所以,程序执行的访存信息量为 45b+60b+36b=141b. (3)用二地址多通用寄存器指令编的程序共用10条指令,每条指令含1个操作码,2个源操作数地址且第1个源操作数地址也是目的操作数地址;或者是1个是源操作数地址一个是目的操作数地址。 源操作数地址和目的操作数地址可以是存储单元地址,也可以是寄存器地址。 由程序可知,有2条指令的2个操作数地址是寄存存器地址,指令字长为p+2r=1b+2*0。 5b=2b,其余指令2个操作数地址都1个是存储单元地址1个是寄存器地址,指令字长为p+a+r=1b+2b+0。 5b=3.5b。 所以,程序所用的存储
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 指令 格式 优化 设计