1、2.1 数据表示 2.2 寻址技术 2.3 指令格式的优化设计 2.4 指令系统的功能设计 2.5 RISC指令系统 2.6 VLIW指令系统,第2章 指 令 系 统,在机器上直接运行的程序是由指令组成的。 指令系统是软件与硬件之间的一个主要分界面,也是他们之间互相沟通的一座桥梁。硬件设计人员采用各种手段实现指令系统,而软件设计人员则使用这些指令系统编制系统软件和应用软件,用这些软件来填补指令系统与人们习惯的使用方式之间的语义差距。 指令系统设计必须由软件设计人员和硬件设计人员共同来完成。 指令系统发展相当缓慢,需要用软件来填补的东西也就越来越多。,本章主要内容有三大方面: 数据表示 寻址技术
2、 指令系统设计 有三种类型的指令系统: CISC:复杂指令系统 RISC:精简指令系统 VLIW:超长指令字 指令系统设计: 指令的格式设计 指令系统的功能设计 指令系统的性能评价,2.1 数据表示,2.1.1 数据表示与数据类型 2.1.2 浮点数的表示方法 2.1.3 浮点数格式设计 2.1.4 浮点数的舍入处理 2.1.5 警戒位的设置方法 2.1.6 自定义数据表示,2.1.1 数据表示与数据类型,数据表示的定义:数据表示是指计算机硬件能够直接识别,可以被指令系统直接调用的那些数据类型。例如:定点、逻辑、浮点、十进制、字符、字符串、堆栈和向量等 数据类型:文件、图、表、树、阵列、队列、
3、链表、栈、向量、串、实数、整数、布尔数、字符等 确定哪些数据类型用数据表示实现,是软件与硬件的取舍问题,确定数据表示的原则一是缩短程序的运行时间二是减少CPU与主存储器之间的通信量三是这种数据表示的通用性和利用率数据表示在不断发展例如:矩阵、树、图、表及自定义数据表示等已经开始用于数据表示中 例2.1:计算CAB,其中,A、B、C均为200200的矩阵。分析采用向量数据表示的作用。,解:如果在没有向量数据表示的计算机上实现,一般需要6条指令,其中有4条指令要循环4万次。因此,CPU与主存储器之间的通信量:取指令:2440,000条,读或写数据:340,000个,共要访问主存储器:740,000
4、次以上 如果有向量数据表示,只需要一条指令。减少访问主存(取指令)次数440,000次 用软件和硬件结合的方法实现新的数据表示用字节编址支持字符串数据表示用变址寻址方式来支持向量数据表示,1. 浮点数的表示方式 两个数值:尾数m:数制(小数或整数)和码制(原码或补码)阶码e:整数, 移码(偏码、增码、余码)或补码 两个基值:尾数基值rm:2、4、8、16和10进制等阶码基值re: 通常为2进制 两个字长:长度和物理位置,均不包括符号位尾数长度p:尾数部分按基值计算的长度阶码长度q:阶码部分的二进制位数,2.1.2 浮点数的表示方法,解:1100 0001 1100 0000 0000 0000
5、 0000 0000-12/16 161 -12.0,浮点数的存储式,在浮点数表示中,上述有些参数是隐含的 例2 .2:已知一个32位浮点数 C1C00000,无法知道它表示的是什么数值!给出6个参数:尾数用纯小数,原码表示,rm=16,p=6;阶码用整数,移码表示,re=2,q=6;浮点数格式如下图。,2. 浮点数的表数范围尾数为原码、小数,阶码用移码、整数时,规格化浮点数N的表数范围:尾数为补码,负数区间的表数范围为:浮点数在数轴上的分布情况,例2.3:尾数用原码、小数表示,阶码用移码、整数表示,p23,q7,rmre2,求规格化浮点数N的表数范围。 解:规格化浮点数N的表数范围是:即:,
6、规格化最大正数:0111 1111 1111 1111 1111 1111 1111 1111规格化最小正数:0000 0000 0100 0000 0000 0000 0000 0000规格化最大负数:1000 0000 0100 0000 0000 0000 0000 0000规格化最小负数:1111 1111 1111 1111 1111 1111 1111 1111,阶码用移码表示浮点0的范围:对于上例:如果阶码用补码表示,浮点0为:0100 0000 0000 0000 0000 0000 0000 0000浮点0与机器0不同,判0困难。阶码与补码的关系十进制: -128 -1 0
7、+127补码:1000 0000 1111 1111 0000 0000 0111 1111移码:0000 0000 0111 1111 1000 0000 1111 1111,例2.4:尾数用补码、小数表示,阶码用移码、整数表示,p23,q7,rmre2,求规格化浮点数N的表数范围。 解:规格化浮点数N在正数区的表数范围:N在负数区的表数范围:,规格化最大正数: 相同0111 1111 1111 1111 1111 1111 1111 1111规格化最小正数: 相同0000 0000 0100 0000 0000 0000 0000 0000,规格化最大负数: 尾数 -0.100 0 . 0
8、 00011000 0000 0011 1111 1111 1111 1111 1111规格化最小负数: 尾数 -1.01111 1111 1000 0000 0000 0000 0000 0000,例2.5:尾数用补码、小数表示,阶码用移码、整数表示,p6,q6,rm16,re2,求规格化浮点数N表数范围是: 解:规格化浮点数N在正数区间的表数范围:在负数区间的表数范围:,规格化最大负数: 尾数 -0.0001 00. 0 00011000 0000 1110 1111 1111 1111 1111 1111规格化最小负数: 尾数 -1.01111 1111 0000 0000 0000 0
9、000 0000 0000,规格化最大正数:相同0111 1111 1111 1111 1111 1111 1111 1111规格化最小正数:相同0000 0000 0001 0000 0000 0000 0000 0000,3. IEEE754浮点数国际标准 32位单精度浮点数格式如下:阶码用移-127码表示,即阶码的0255分别表示阶码的真值为-127128。尾数用原码、小数,1位符号位、23位小数和1位隐藏的整数共25位表示。尾数和阶码的基值都是2。 64位双精度浮点数,阶码用11位移码表示,IEEE754单精度浮点数特殊数据的表示 当0e255时,表示规格化浮点数:N = (-1)S2
10、e-127(1.m) 当e255,且m0时,表示一个非数NaN,NaN(Not-a-Number)可能是零除以零、求负数的平方根等情况产生的结果。 当e255,且m0时,表示一个无穷数:(-1)S。 当e0,且m0时,表示规格化浮点数:N=(-1)S2-126(0.m) 当e0,且m0时,表示浮点数零:(-1)S0,4. 浮点数的表数精度(误差)产生误差的根本原因是浮点数的不连续性误差产生的直接原因有两个:(1) 两个浮点数都在浮点集内,而运算结果却可能不在这个浮点集内(2) 数据从十进制转化为2、4、8、16进制,产生误差。规格化浮点数的精度为:最后1个有效位的可信度为一半当rm2时,有:,
11、5. 浮点数的表数效率浮点数是一种冗余数制(Redundat Number System)浮点数的表数效率定义为:简化表示:当尾数基值为2时,浮点数的表数效率为:,浮点数的表数效率随rm增大当尾数基值rm16时,浮点数的表数效率为:尾数基值rm16与rm2相比,浮点数的表数效率提高了:,2.1.3 浮点数格式设计,1. 浮点数格式设计的主要问题在表示浮点数的6个参数中,只有尾数基值rm、尾数长度p和阶码长度q与表数范围、表数精度和表数效率有关在字长确定的情况下,如何选择尾数基值rm,使表数范围最大、表数精度和表数效率最高,2. 浮点数尾数基值的选择假设有两种表示方式F1和F2,它们二进制字长相
12、同,尾数都用原码或补码、小数表示,阶码都用移码、整数表示,阶码的基值均为2,尾数的基值不同。浮点数表示方式F1:rm12,p1,q1,二进制字长:L1p1q12浮点数表示方式F2:rm22k,p2,q2,二进制字长:L2kp2q22由F1与F2的二进制字长相同,即L1L2,得:p1q1kp2q2 (2.1),字长和表数范围确定时,尾数基值与表数精度的关系F1的表数范围是:F2的表数范围是:F1与F2的表数范围相同,得到:两边取以2为底的对数得:q1q2log2 k (2.2)(2.2)代入(2.1) 得: p1q2log2 kkp2q2 化简得到:p1kp2log2 k (2.3)F1的表数精
13、度是: (2.4),把(2.3)代入(2.4)得到:F2的表数精度是:取F2与F1表数精度的比值:(2.5)只有k1(rm2)或k2(rm4)时,比值T1结论1:在字长和表数范围一定时,尾数基值rm取2或4,浮点数具有最高的表数精度。,字长和表数精度一定,尾数基值rm与表数范围的关系由F1与F2的表数精度相同得到:即: p1kp2k1 (2.6)(2.6)代入(2.1)得:kp2k1q1kp2q2 即:q1q2k1 (2.7)F1的表数范围:F2的表数范围:,假设F2的表数范围大于F1的表数范围,则应该有F2阶码的最大值要大于F1阶码的最大值: 即:这个不等式在正整数定义域内没有解只有k1(r
14、m2)或 k2(rm4)时,F2阶码的最大值等于F1阶码的最大值。 结论2:在字长和表数精度一定时,尾数基值rm取2或4,浮点数具有最大的表数范围。 推论:在字长确定之后,尾数基值rm取2或4,浮点数具有最大表数范围和最高表数精度。,例2.6:IBM 370系列机的短浮点数表示方式,rm16,p6,re2,q6,尾数用原码、小数表示,阶码用移码、整数表示。求表数范围和表数精度,并与rm2时进行比较。 解:表数精度为:表数范围是:若尾数基值rm2,则有:解得p21,则q9,它的表数范围是:,表数效率:当rm2时:1/250当rm4时:3/475当rm2时,规格化浮点数可以采用隐藏位方法表示如果尾
15、数用原码表示,最高位一定为1如果尾数用补码表示,最高位一定与符号位相反这时,表数效率为100 结论:浮点数的尾数基值rm取2,并采用隐藏位表数方法是最佳的浮点数表示方式。这种浮点数表示方式能做到表数范围最大、表数精度最高、表数效率最好。,主要的浮点数表示方法 IBM公司的IBM360、370、4300系列机等,尾数基值rm16 Burroughs公司的B6700、B7700等大型机,尾数基值rm8 DEC公司的PDP-11、VAX-11和Alpha小型机;CDC公司的CDC6600、CYBER70等大型机;HP公司的PR-RISC;Intel公司的x86系列机;IEEE754浮点数国际标准;均
16、采用尾数基值rm2,3. 浮点数格式设计定义浮点数格式的6个参数,确定原则如下: 尾数:多数机器用原码、小数表示采用原码表示:加减法比补码表示复杂,乘除法比补码简单,而且非常直观。采用小数表示能简化运算,特别是乘法和除法运算。 阶码:一般机器用整数、移码表示采用移码表示的主要原因是:浮点0与机器0一致。阶码进行加减运算时,移码的加减法运算要比补码复杂,基值:尾数的基值rm2,阶码的基值re2, 采用隐藏位表示方式能够使规格化浮点数的表数效率达到100(当rm2时) 浮点数格式设计的关键问题是:在表数范围和表数精度给定的情况下,如何确定最短的尾数字长p和阶码字长q,并根据总字长的要求,恰当分配p
17、与q,解:根据表数范围的要求:解这个不等式:两边取以10为底的对数。两边取以10为底的对数:,4. 浮点数格式设计举例 例2.7:请设计一种浮点数格式,要求表数范围不小于1037,正、负数对称,表数精度不低于10-16。,取阶码字长q7 根据表数精度的要求: 解这个不等式: 解得:,由于浮点数的字长通常为 8 的倍数,因此,取p55 总的字长为:755 11 64,浮点数格式如下:,尾数用原码、小数表示,阶码用移码、整数表示,rm2,p56(最高有效位隐藏), re2,q7。 上例所设计浮点数格式的性能如下:,绝对值最大的尾数:1-rm-p = 1-2-56 绝对值最小的尾数:1/rm = 1
18、/2 最大阶码: re q-1 = 127 最小阶码: -re q = -128 最大正数:(1-2-56) 2127= 1.70 1038 最小正数:1/2 2-128 = 1.47 10-39 最大负数:-1/2 2-128 = -1.47 10-39 最小负数:-(1-2-56) 2127= -1.70 1038 表数精度:2-56 = 1.39 10-17 表数效率:100% 浮点零:与机器零相同,64位全0,2.1.4 浮点数的舍入处理,浮点数要进行舍入处理的原因是: (1)十进制数转化为浮点数时,有效位长度超过给定的尾数字长。 (2)两个浮点数的加减乘除结果,尾数长度超过给定的尾数
19、字长。 舍入处理要解决的问题是:把规格化尾数的pg位处理成只有p位。其中:p是浮点数表示方式给定的尾数字长,g是超过给定尾数字长的部分。,舍入方法的主要性能标准是:绝对误差小,积累误差小,容易实现。 进行舍入处理时要注意的问题是: 必须先规格化,然后再舍入,否则舍入是没有意义的。 在计算积累误差时,要同时考虑到正数区和负数区的情况。,方法1:恒舍法 又称截断法、必舍法等 优缺点:实现非常容易。误差大,正负区误差相反,但同一区误差积累。,方法2:恒置法 恒置r/2法、冯诺依曼法 规则:把有效字长的最低一位置成r/2。 优缺点:实现比较容易,积累误差较小,正负区误差平衡。精度比较低。,方法3:下舍
20、上入法 4舍5入法、0舍1入法等 优缺点:精度高,积累误差小,正负区误差完全平衡。实现起来比较困难。,方法4:R*舍入法 只有少数巨型机采用 优缺点:没有积累误差,精度很高。实现很复杂。判断g是否为10.0,采用下舍上入法或恒置法,如果溢出,可能要再次右规格化。,方法5:查表法 ROM舍入法,PLA舍入法等 优缺点:通过修改ROM或PLA,使积累误差达到平衡。继承了下舍上入法精度高、积累误差小的优点,同时又克服了实现困难的缺点。,前2n+1-2行采用下舍上入法,总的积累误差为:(2n-1)2-p-1 , 与g无关 最后2行采用恒舍法,总的积累误差为:-2-p-1(2g 1), 与g有关 总的积
21、累误差为: 2-p-1(2n 2g) 当n=g的时候,积累误差完全平衡 当ng的时候,积累误差为正 当n、等符号反过来。 通过精心设计ROM中所存储的内容,针对各种不同应用领域,使积累误差尽可能小。,关于舍入方法的主要结论: 恒置法虽有少量的积累误差,且损失一位精度,但由于实现很容易,普遍在小型微型机中使用。 R*舍入法是唯一积累误差能达到完全平衡的舍入方法,但由于实现非常复杂,仅在少数对误差要求非常高的机器中采用。 下舍上入法只有少量积累误差,且精度比较高,但实现很复杂,用于软件实现的算法中。 查表法实现比较容易,积累误差很小,且可以通过改变ROM或PLA中的内容来修正积累误差,是一种很有前
22、途的舍入方法。,补码制中的舍入方法: 恒舍法在负数区和正数区的积累误差都是负误差,因此积累误差非常大。为使负数区为正误差,则要改用“恒入法”,实现起来非常困难。 其余4种舍入方法的舍入规则保持不变。 反码制中的舍入方法: 恒舍法保持与原码制中相同的舍入方法; 恒置法在负数区要改为恒置反码法; 下舍上入法在负数区要改为上舍下入法,如二进制中改为1舍0入法,且“入”是做减法; 查表法和R*舍入法,负数区的舍入规则由正数区的规则经0、1交换和加、减交换后得到。,2.1.5 警戒位的设置方法,在规定的尾数字长之外,运算器中的累加器需要另外增加的长度称为警戒位(Guard Bit) 不设置警戒位,可能出
23、现很大的误差 例2.8:0.10000000200.111111012-1,不设置警戒位可能造成完全错误的运算结果 例2.9:0.100021250.11112124,警戒位的用处只有两个:(1) 用于左规格化时移入尾数有效字长内。(2) 用于舍入。 警戒位的来源有以下几个方面:(1) 做加、减法时,因对阶从有效字长内移出去的部分。(2) 做乘法时,双倍字长乘积的低字长部分。(3) 做除法时,因没有除尽而多上商的几位。(4) 右规格化时移出有效字长的那部分。(5) 从十进制转换成二进制时,尾数超出有效字长的部分。,加减法运算对警戒位的需要(1) 同号相加或异号相减,浮点数的尾数之和不需要左规格
24、化,因此不必设置警戒位。1/rm mA1,两数之和为:1/rm mAmB2(2) 同号相减或异号相加,阶差为0, 例2.10:0.10001200.10000200.100002-4 两个尾数之和最多左规格化p-1位,但是对阶时没有移出任何代码。警戒位有需要,但没有来源,因此不必设置警戒位。,(3) 同号相减或异号相加,阶差为1,只需要设置一位警戒位。 例2.11:0.10000200.111112-10.100002-5两个尾数之和最多左规格化p位,但是对阶时只移出1位代码,(4) 同号相减或异号相加,阶差大于等于2,只需一位警戒位。 例2.12:0.10000200.111112-20.1
25、00002-1对阶时移出去很多位,但是两个尾数之和最多只左规格化1位,乘法运算:只需要设置一个警戒位。1/rm mA,mB1,两数乘积:1/rm mAmB1,两个规格化尾数的乘积最多左规格化一位。除法运算:不必设置警戒位。1/rm mA ,mB1,尾数的商:1/rm mA / mBrm,两个规格化尾数的商不需要左规格化。 当浮点尾数基值大于2时,用于舍入的最低位只需设置一个二进制位。,各种情况下所需要的警戒位位数:,2.1.6 自定义数据表示,一般处理机中的数据表示方法 数据存储单元(寄存器、主存储器、外存储器等)只存放纯数据,数据的属性通过指令中的操作码来解释: 数据的类型,如定点、浮点、字
26、符、字符串、逻辑数、向量等; 进位制,如2进制、10进制、16进制等; 数据字长,如字、半字、双字、字节等; 寻址方式,如直接寻址、间接寻址、相对寻址、寄存器寻址等;,数据的功能,如地址、地址偏移量、数值、控制字、标志等; 同一种操作(如加法)通常有很多条指令。 在高级语言和应用软件中数据的属性由数据自己定义;在高级语言与机器语言之间的语义差距,要靠编译器等填补。 Burroughs公司在大型机中引入自定义数据表示方式和带标志符的数据表示方式,1. 带标志符的数据表示法在B5000大型机中,每个数据有一位标志符在B6500和B7500大型机中,每个数据有三位来标志符在R-2巨型机中采用10位标
27、志符,R-2巨型机中的标志符功能位:操作数、指令、地址、控制字陷井位:由软件定义四种捕捉方式封写位:指定数据是只读的还是可读可写类型位:二进制,十进制,定点数,浮点数,复数,字符串,单精度,双精度;绝对地址、相对地址、变址地址、未连接地址等。 标志符由编译器或其它系统软件建立,对程序员透明 程序(包括指令和数据)的存储量分析数据存储量增加,指令存储量减少。,例2.13:假设X处理机的数据不带标志符,其指令字长和数据字长均为32位;Y处理机的数据带标志符,数据字长增加至35位,其中3位是标志符,其指令字长由32位减少至30位。并假设一条指令平均访问两个操作数,每个操作数平均被访问R次。分别计算这
28、两种不同类型的处理机中程序所占用的存储空间。 解:X和Y处理机程序占用的存储空间总和分别为: 和,程序占用存储空间的比值:当R3时,有 ,在实际应用中经常是 R10,即带标志符的处理机所占用的存储空间通常要小。,常规数据表示方法与 带标志符数据表示方法的 比较,例2.13:在IBM370中执行AAB 运算。 若A和B都是十进制数,只需要一条指令,共6个字节,在IBM370/145上执行时间是13微秒。 若A与B中有一个是定点二进制数,由于要进行数据类型的一致性检查和转换,在PL/I语言中的编译结果为13条指令,共64个字节,在IBM370/145机上执行时间增加到408微秒。 两者相比,存储空
29、间节省5倍,运算速度快30多倍。 如果采用自定义数据表示方法,由硬件自动实现一致性检查和数据类型的转换。,采用标志符数据表示方法的主要优点: (1)简化了指令系统。 (2)由硬件实现一致性检查和数据类型转换。 (3)简化程序设计,缩小了人与计算机之间的语义差距。 (4)简化编译器,使高级语言与机器语言之间的语义差距大大缩短。 (5)支持数据库系统,一个软件不加修改就可适用于多种数据类型。 (6)方便软件调试,在每个数据中都有陷井位。,采用标志符数据表示方法的主要缺点: (1)数据和指令的长度可能不一致可以通过精心设计指令系统来解决。 (2)指令的执行速度降低但是,程序的运行时间是由设计时间、编
30、译时间和调试时间共同组成的。采用标志符数据表示方法,程序的设计时间、编译时间和调试时间可以缩短。(3)硬件复杂度增加由硬件实现一致性检查和数据类型的转换。,2. 数据描述符表示法 数据描述符与标志符的区别:标志符只作用于一个数据,而数据描述符要作用于一组数据。 Burroughs公司生产的B-6700机中采用的数据描述符表示方法。最高三位为101时表示数据描述符,最高三位为000时表示数据。,例3.14:用数据描述符表示方法表示一个34的矩阵:,2.2 寻址技术,寻找操作数及其地址的技术称为寻址技术2.2.1 编址方式2.2.2 寻址方式2.2.3 定位方式重点:寻址方式的选择,2.2.1 编
31、址方式,对各种存储设备进行编码的方法。 主要内容:编址单位、零地址空间个数、并行存储器的编址、输入输出设备的编址 1. 编址单位 常用的编址单位:字编址、字节编址、位编址、块编址等 编址单位与访问字长一般:字节编址,字访问部分机器:位编址,字访问辅助存储器:块编址,位访问,字节编址字访问的优点:有利于符号处理字节编址字访问的问题:(1) 地址信息浪费对于32位机器,浪费2位地址(最低2位地址)对于64位机器,浪费3位地址(2) 存储器空间浪费(3) 读写逻辑复杂(4) 大端(Big Endin)与小端(Little Endian)问题,(2)存储器空间浪费,读一个字节 用多路选择器,写一个字节
32、 先读后写,(3)读写逻辑复杂 增加1个align操作,(4)大端(Big Endin)与小端(Little Endian)问题,2. 零地址空间个数 三个零地址空间:通用寄存器、主存储器、输入输出设备独立编址 两个零地址空间:主存储器与输入输出设备统一编址 一个零地址空间:最低端是通用寄存器,最高端是输入输出设备,中间为主存储器 隐含编址方式:堆栈、Cache等 3. 并行存储器的编址技术 高位交叉编址:主要用来扩大存储器容量。 低位交叉编址:主要是提高存储器速度。,4. 输入输出设备的编址 一台设备一个地址:通过指令来区分地址,地址内部区分地址。 一台设备两个地址:数据寄存器、状态或控制寄
33、存器。 多个编址寄存器共用同一个地址的方法:依靠地址内部来区分,适用于被编址的寄存器的长度比较短“下跟法”隐含编址方式,必须按顺序读写寄存器。 一台设备多个地址:增加编程的困难,2.2.2 寻址方式,寻找操作数及数据存放地址的方法 1. 寻址方式的设计思想 立即数寻址方式用于数据比较短,且为源操作数的场合 面向寄存器的寻址方式OPC ROPC R, ROPC R, R, ROPC R, M,面向主存储器的寻址方式:直接寻址、间接寻址、变址寻址、相对寻址基址寻址、自动变址、OPC MOPC M, MOPC M, M, M面向堆栈的寻址方式:OPC ;运算型指令OPC M ;数据传送型指令,2.
34、寄存器寻址 主要优点:指令字长短,指令执行速度快,支持向量和矩阵等运算 主要缺点:不利于优化编译,现场切换困难,硬件复杂 3. 堆站寻址方式 主要优点:支持高级语言,有利与编译程序,节省存储空间,支持程序的嵌套和递归调用,支持中断处理 主要缺点:运算速度比较低,栈顶部分设计成一个高速的寄存器堆,4. 间接寻址方式与变址寻址方式的比较 目的相同:都是为了解决操作数地址的修改 原则上,一种处理机中只需设置间址寻址方式与变址寻址方式中的任何一种即可,有些处理机两种寻址方式都设置 如何选取间址寻址方式与变址寻址方式? 例2.15:一个由N个元素组成的数组,已经存放在起始地址为AS的主存连续单元中,现要
35、把它搬到起始地址为AD的主存连续单元中。不必考虑可能出现的存储单元重叠问题。为了编程简单,采用一般的两地址指令编写程序。,用间接寻址方式编写程序如下:START: MOVE ASR, ASI ;保存源起始地址MOVE ADR, ADI ;保存目标起始地址MOVE NUM, CNT ;保存数据的个数LOOP: MOVE ASI,ADI ;传送一个数据INC ASI ;源数组的地址增量INC ADI ;目标数组地址增量DEC CNT ;个数减1BGT LOOP ;测试数据传送完?HALT ;停机,ASR: AS ;源数组的起始地址ADR: AD ;目标数组的起始地址NUM: N ;需要传送的数据个
36、数ASI: 0 ;当前正在传送的源;数组地址ADI: 0 ;当前正在传送的目标;数组地址CNT: 0 ;剩余数据的个数,用变址寻址方式编写程序如下:START: MOVE AS, X ;取源数组起始地址MOVE NUM, CNT ;保存数据个数LOOP: MOVE (X),AD-AS(X);传送一个数据INC X ;增量变址寄存器DEC CNT ;个数减1BGT LOOP ;测试数据传送完成HALT ;停机NUM: N ;传送的数据个数CNT: 0 ;剩余数据的个数,主要优缺点比较:(1)采用变址寻址方式编写的程序简单、易读。(2)对于程序员,两种寻址方式的主要差别是:间址寻址:间接地址在主存
37、中,没有偏移量变址寻址:基地址在变址寄存器中, 有偏移量(3)实现的难易程度:间址寻址方式容易实现(4)指令的执行速度:间址寻址方式慢(5)对数组运算的支持:变址寻址方式比较好自动变址:在访问间接地址时,地址自动增减前变址与后变址:变址与间址混合时前变址寻址方式:EA(X)A)后变址寻址方式:EA(X)(A),2.2.3 定位方式,程序的主存物理地址在什么时间确定?采用什么方式来实现? 程序需要定位的主要原因: 程序的独立性 程序的模块化设计 数据结构在程序运行过程中,其大小往往是变化的 有些程序本身很大,大于分配给它的主存物理空间,主要的定位方式 直接定位方式:在程序装入主存储器之前,程序中
38、的指令和数据的主存物理就已经确定了的称为直接定位方式。 静态定位:在程序装入主存储器的过程中随即进行地址变换,确定指令和数据的主存物理地址的称为静态定位方式。 动态定位:在程序执行过程中,当访问到相应的指令或数据时才进行地址变换,确定指令和数据的主存物理地址的称为动态定位方式。,2.3 指令格式的优化设计,主要目标:节省程序的存储空间指令格式尽量规整,便于译码2.3.1 指令的组成2.3.2 操作码的优化设计2.3.3 地址码的优化设计2.3.4 指令格式设计举例,2.3.1 指令的组成,一般的指令主要由两部分组成:操作码和地址码地址码通常包括三部分内容: 地址:地址码、立即数、寄存器、变址寄
39、存器 地址的附加信息:偏移量、块长度、跳距 寻址方式:直接寻址、间接寻址、立即数寻址、变址寻址、相对寻址、寄存器寻址,操作码主要包括两部分内容: 操作种类:加、减、乘、除、数据传送、移位、转移、输入输出、程序控制、处理机控制等 操作数描述:数据的类型:定点数、浮点数、复数、字符、字符串、逻辑数、向量进位制:2进制、10进制、16进制数据字长:字、半字、双字、字节,2.3.2 操作码的优化表示,操作码的三种编码方法:固定长度、Huffman编码、扩展编码 优化操作码编码的目的:节省程序存储空间 例如:Burroughs公司的B-1700机,1. 固定长操作码 定长定域:IBM公司的大中型机:最左
40、边8位为操作码Intel公司的Intanium处理机:14位定长操作码许多RISC处理机采用定长操作码 主要优点:规整译码简单 主要缺点:浪费信息量(操作码的总长位数增加),2. Huffman编码法1952年由Huffman首先提出操作码的最短平均长度可通过如下公式计算:pi表示第i种操作码在程序中出现的概率固定长编码相对于Huffman编码的信息冗余量:必须知道每种操作码在程序中出现的概率,例2.16:假设一台模型计算机共有7种不同的操作码,如果采用固定长操作码需要3位。已知各种操作码在程序中出现的概率如下表,计算采用Huffman编码法的操作码平均长度,并计算固定长操作码和Huffman
41、操作码的信息冗余量。,例2.17解答: 利用Huffman树进行操作码编码(又称最小概率合并法) 把所有指令按照操作码在程序中出现的概率大小,自左向右顺序排列。 选取两个概率最小的结点合并成一个概率值是二者之和的新结点,并把这个新结点与其它还没有合并的结点一起形成一个新的结点集合。,在新结点集合中选取两个概率最小的结点进行合并,如此继续进行下去,直至全部结点合并完毕。 最后得到的根结点的概率值为1。 每个新结点都有两个分支,分别用带有箭头的线表示,并分别用一位代码“0”和“1”标注。 从根结点开始,沿尖头所指方向寻找到达属于该指令概率结点的最短路径,把沿线所经过的代码排列起来就得到了这条指令的
42、操作码编码。,利用Huffman树进行操作码编码,利用Huffman树进行操作码编码,利用Huffman树进行操作码编码,利用Huffman树进行操作码编码,利用Huffman树进行操作码编码,利用Huffman树进行操作码编码,利用Huffman树进行操作码编码,利用Huffman树进行操作码编码,Huffman操作码编码,解:采用Huffman编码法的操作码平均长度为:0.4510.3020.1530.0540.0350.0160.0161.97(位)操作码的最短平均长度为:0.451.1520.301.7370.152.7370.054.3220.035.0590.016.6440.01
43、6.6441.95(位),采用3位固定长操作码的信息冗余量为:Huffman编码法的信息冗余量仅为:与3位固定长操作码的信息冗余量35相比要小得多,3. 扩展编码法 Huffman操作码的主要缺点:操作码长度很不规整,硬件译码困难与地址码共同组成固定长的指令比较困难 扩展编码法:由固定长操作码与Huffman编码法相结合形成 例2.18:将例2.17改为1-2-3-5扩展编码法,操作码最短平均长度为:H0.4510.3020.153(0.050.030.010.01)52.00信息冗余量为:,例2.19:将例2.17改为2-4等长扩展编码法,操作码最短平均长度为:H(0.450.300.15)
44、2(0.050.030.010.01)42.20 2-4等长扩展编码法信息冗余量为:,2.3.3 地址码的优化表示,1. 地址码个数的选择 地址码个数通常有3个、2个、1个及个等4种情况 评价指令中地址码个数应该取多少的标准主要有两个: 程序存储容量,包括操作码和地址码 程序执行速度,以程序执行过程中访问主存的信息量代表 通过一个典型例子来分析:,例如:计算一个典型的算术表达式: 用三地址指令编写的程序如下:MUL X, A, B ;X(A)(B)ADD X, X, C ;X(X)(C)SUB X, X, D ;分子的计算结果在中ADD Y, E, F ;计算分母,存入YDIV X, X, Y
45、 ;最后结果在X单元中,用普通二地址指令编写的程序:MOVE X, A ;复制临时变量到X中MUL X, BADD X, CSUB X, D ;X中存放分子运算结果MOVE Y, E ;复制临时变量到Y中ADD Y, F ;Y中存放分母运算结果DIV X, Y ;最后结果在X单元中,用多寄存器结构的二地址指令编写程序:MOVE R1, A ;操作数a取到寄存器R1中MUL R1, BADD R1, CSUB R1, D ;R1中存放分子运算结果MOVE R2, EADD R2, F ;R2中存放分母运算结果DIV R1, R2 ;最后结果在R1中MOVE X, R1 ;最后结果存入X中,用一地
46、址指令编写的程序:LOAD E ;先计算分母,;取一个操作数到累加器中ADD F ;分母运算结果在累加器中STORE X ;保存分母运算结果到X中LOAD A ;开始计算分子MUL BADD CSUB D ;累加器中是分子运算结果DIV X ;最后运算结果在累加器中STORE X ;保存最后运算结果到X中,用0地址指令编写程序: ab*c+d-ef+/PUSH A ;操作数a压入堆栈PUSH B ;操作数b压入堆栈MUL ;栈顶两数相乘,结果压回堆顶PUSH CADDPUSH DSUB ;栈顶是分子运算的结果PUSH EPUSH FADDDIV ;栈顶是最后运算的结果POP X ;保存最后运算
47、结果,关于地址码个数结论: 对于一般商用处理机,采用多寄存器结构的二地址指令是最理想的。 如果强调硬件结构简单,并且以连续运算(如求累加和等)为主,宜采用一地址结构。 对于以向量、矩阵运算为主的处理机,最好采用三地址结构。部分RISC处理机也采用三地址指令。 对于解决递归问题为主的处理机,宜采用零地址结构。编程容易、节省程序存储量。,2. 缩短地址码长度的方法用一个短地址码表示一个大地址空间 用间址寻址方式缩短地址码长度方法:在主存储器的低端开辟一个专门存放间接地址的区域 用变址寻址方式缩短地址码长度变址寻址方式中的地址偏移量比较短, 用寄存器间接寻址方式缩短地址码长度例如:16个间址寄存器,
48、用4位地址码就能表示很长的逻辑地址空间。,2.3.4 指令格式设计举例,1. MIPS32-4K的指令格式,MIPS32-4K的指令格式,MIPS32-4K的指令格式,MIPS32-4KC指令Opcode段编码,SPECIAL操作码对应Function段编码,SPECIAL2操作码对应Function段编码,REGIMM操作码对应rt段编码,COP0 中 rs 段编码,COP0 中 rs为CO时funciton段编码,MIPS 32 4K 的 寄 存 器 结 构,2. ARM处理机的指令格式(32位),ARM处理机的指令格式(条件执行),ARM处理机的指令格式(16位),3. 安腾(Intanium)处理机的指令格式,1个bundle有三条指令和一个template,Template指示这三条指令的类型及stop的位置; Predicate指示本指令的启动时刻。,