资源描述
在机器上直接运行的程序是由指令组成的程序是由指令组成的。指令系统是软件与硬件之间的一个主要分界面,也是他们之间互相沟通的一座桥梁互相沟通的一座桥梁。硬件设计人员采用各种手段实现指令系统,而软件设计人员则使用这些指令系统编制系统软件和应用软件,用这些软件来填补指令系统与人们习惯的使用方式之间的语义差距。指指令令系系统统设设计计必须由软件设计人员和硬件设计人员共同来完成。指令系统发展相当缓慢,需要用软件来填补的东西也就越来越多。本章主要内容有三大方面:本章主要内容有三大方面:数据表示寻址技术指令系统设计有三种类型的指令系统:有三种类型的指令系统:CISC:复杂指令系统RISC:精简指令系统VLIW:超长指令字指令系统设计:指令系统设计:指令的格式设计指令系统的功能设计指令系统的性能评价2.1 2.1 数据表示数据表示2.1.1 数据表示与数据类型数据表示与数据类型2.1.2 浮点数的表示方法浮点数的表示方法2.1.3 浮点数格式设计浮点数格式设计2.1.4 浮点数的舍入处理浮点数的舍入处理2.1.5 警戒位的设置方法警戒位的设置方法2.1.6 自定义数据表示自定义数据表示2.1.1 2.1.1 数据表示与数据类型数据表示与数据类型数据表示的定义:数据表示的定义:数据表示是指计算机硬件能够直接识别,可数据表示是指计算机硬件能够直接识别,可以被指令系统直接调用的那些数据类型。以被指令系统直接调用的那些数据类型。例如:定点、逻辑、浮点、十进制、字符、字符串、堆栈和向量等数据类型:数据类型:文件、图、表、树、阵列、队列、链表、栈、向量、串、实数、整数、布尔数、字符等确定哪些数据类型用数据表示实现,是软件与确定哪些数据类型用数据表示实现,是软件与硬件的取舍问题硬件的取舍问题 确定数据表示的原则确定数据表示的原则 一是缩短程序的运行时间一是缩短程序的运行时间 二是减少二是减少CPUCPU与主存储器之间的通信量与主存储器之间的通信量 三是这种数据表示的通用性和利用率三是这种数据表示的通用性和利用率 数据表示在不断发展数据表示在不断发展 例如:矩阵、树、图、表及自定义数据表示 等已经开始用于数据表示中例例2.12.1:计算CAB,其中,A、B、C均为 200200的矩阵。分析采用向量数据表示 的作用。解:解:如果在没有向量数据表示的计算机上实现,一般需要6条指令,其中有4条指令要循环4万次。因此,CPU与主存储器之间的通信量:取指令:取指令:2 2440,000440,000条,条,读或写数据:读或写数据:340,000340,000个,个,共要访问主存储器:共要访问主存储器:740,000740,000次以上次以上如果有向量数据表示,只需要一条指令。如果有向量数据表示,只需要一条指令。减少访问主存(取指令)次数减少访问主存(取指令)次数440,000440,000次次用软件和硬件结合的方法实现新的数据表示用软件和硬件结合的方法实现新的数据表示 用字节编址支持字符串数据表示 用变址寻址方式来支持向量数据表示1.1.浮点数的表示方式浮点数的表示方式两个数值:两个数值:尾数尾数m:数制:数制(小数或整数小数或整数)和码制和码制(原码或补码原码或补码)阶码阶码e:整数:整数,移码移码(偏码、增码、余码偏码、增码、余码)或补码或补码两个基值:两个基值:尾数基值尾数基值rm:2、4、8、16和和10进制等进制等 阶码基值阶码基值re:通常为通常为2进制进制2.1.2 2.1.2 浮点数的表示方法浮点数的表示方法两个字长:长度和物理位置两个字长:长度和物理位置,均不包括符,均不包括符号位号位 尾数长度尾数长度p:尾数部分按基值计算的长度:尾数部分按基值计算的长度 阶码长度阶码长度q:阶码部分的二进制位数:阶码部分的二进制位数2.2.浮点数的表数范围浮点数的表数范围尾数为原码、小数,阶码用移码、整数时,规格化浮点数N的表数范围:尾数为补码尾数为补码,负数区间的表数范围为:浮点数在数轴上的分布情况浮点数在数轴上的分布情况 阶码用移码表示阶码用移码表示 浮点0的范围:对于上例:如果阶码用补码表示,浮点0为:0100 0000 0000 0000 0000 0000 0000 0000浮点0与机器0不同,判0困难。阶码与补码的关系阶码与补码的关系十进制:十进制:-128 -1 0 +127 补码:补码:1000 0000 1111 1111 0000 0000 0111 1111 移码:移码:0000 0000 0111 1111 1000 0000 1111 11113.IEEE7543.IEEE754浮点数国际标准浮点数国际标准32位单精度浮点数格式如下:阶码用移-127码表示,即阶码的0255分别表示阶码的真值为-127128。尾数用原码、小数,1位符号位、23位小数和1位隐藏的整数共25位表示。尾数和阶码的基值都是2。64位双精度浮点数,阶码用11位移码表示4.4.浮点数的表数精度(误差)浮点数的表数精度(误差)产生误差的根本原因是浮点数的不连续性 误差产生的直接原因有两个:误差产生的直接原因有两个:(1)两个浮点数都在浮点集内,而运算结果却两个浮点数都在浮点集内,而运算结果却可能不在这个浮点集内可能不在这个浮点集内 (2)数据从十进制转化为数据从十进制转化为2、4、8、16进制,进制,产生误差。产生误差。规格化浮点数的精度为:最后最后1个有效位的可信度为一半个有效位的可信度为一半当rm2时,有:5.5.浮点数的表数效率浮点数的表数效率 浮点数是一种冗余数制(RedundatNumberSystem)浮点数的表数效率定义为:简化表示:当尾数基值为2时,浮点数的表数效率为:浮点数的表数效率随rm增大当尾数基值rm16时,浮点数的表数效率为:尾数基值rm16与rm2相比,浮点数的表数效率提高了:2.1.3 2.1.3 浮点数格式设计浮点数格式设计1.1.浮点数格式设计的主要问题浮点数格式设计的主要问题 在表示浮点数的6个参数中,只有尾数基值尾数基值rm、尾数长、尾数长度度p和阶码长度和阶码长度q与表数范围、表数精度和表数效率与表数范围、表数精度和表数效率有关有关 在字长确定的情况下,如何选择尾数基值在字长确定的情况下,如何选择尾数基值rm,使表数范围最大、表数精度和表数效率最高使表数范围最大、表数精度和表数效率最高2.2.浮点数尾数基值的选择浮点数尾数基值的选择假设有两种表示方式F1和F2,它们二进制字长相同,尾数都用原码或补码、小数表示,阶码都用移码、整数表示,阶码的基值均为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)得:p1q2log2kkp2q2化简得到:p1kp2log2k(2.3)F1的表数精度是:(2.4)把(2.3)代入(2.4)得到:F2的表数精度是:取F2与F1表数精度的比值:(2.5)只有k1(rm2)或k2(rm4)时,比值T1 结论结论1 1:在字长和表数范围一定时,尾数基值在字长和表数范围一定时,尾数基值 rm取取2 2或或4 4,浮点数具有最高的表数精度。,浮点数具有最高的表数精度。字长和表数精度一定,尾数基值字长和表数精度一定,尾数基值rm与表数范与表数范围的关系围的关系由F1与F2的表数精度相同得到:即:p1kp2k1(2.6)(2.6)代入(2.1)得:kp2k1q1kp2q2即:q1q2k1(2.7)F1的表数范围:F2的表数范围:假设F2的表数范围大于F1的表数范围,则应该有F2阶码的最大值要大于F1阶码的最大值:即:这个不等式在正整数定义域内没有解只有k1(rm2)或k2(rm4)时,F2阶码的最大值等于F1阶码的最大值。结论结论2:在字长和表数精度一定时,尾数基值在字长和表数精度一定时,尾数基值rm取取2或或4,浮点数具有最大的表数范围。,浮点数具有最大的表数范围。推论:推论:在字长确定之后,尾数基值在字长确定之后,尾数基值rm取取2或或4,浮点数具有最大表数范围和最高表数精度。浮点数具有最大表数范围和最高表数精度。表数效率:表数效率:当rm2时:1/250当rm4时:3/475 当rm2时,规格化浮点数可以采用隐藏位隐藏位方法表示 如果尾数用原码表示,最高位一定为1 如果尾数用补码表示,最高位一定与符号位相反这时,表数效率为100结论:结论:浮点数的尾数基值浮点数的尾数基值rm取取2,并采用隐藏,并采用隐藏位表数方法是最佳的浮点数表示方式。这种位表数方法是最佳的浮点数表示方式。这种浮点数表示方式能做到表数范围最大、表数浮点数表示方式能做到表数范围最大、表数精度最高、表数效率最好。精度最高、表数效率最好。3.3.浮点数格式设计浮点数格式设计定义浮点数格式的6个参数,确定原则如下:尾数:尾数:多数机器用原码、小数表示多数机器用原码、小数表示 采用原码表示:加减法比补码表示复杂,乘采用原码表示:加减法比补码表示复杂,乘除法比补码简单,而且非常直观。除法比补码简单,而且非常直观。采用小数表示能简化运算,特别是乘法和除采用小数表示能简化运算,特别是乘法和除法运算法运算。阶码:阶码:一般机器用整数、移码表示一般机器用整数、移码表示 采用移码表示的主要原因是:浮点采用移码表示的主要原因是:浮点0与机器与机器0一致。阶码进行加减运算时,移码的加减法一致。阶码进行加减运算时,移码的加减法运算要比补码复杂运算要比补码复杂基值:基值:尾数的基值尾数的基值rm2,阶码的基值阶码的基值re2,采用采用隐藏位隐藏位表示方式能够使规格化浮点数的表示方式能够使规格化浮点数的表数效率达到表数效率达到100(当(当rm2时)时)浮点数格式设计的关键问题是:浮点数格式设计的关键问题是:在表数范围和表数精度给定的情况下,如何在表数范围和表数精度给定的情况下,如何确定最短的尾数字长确定最短的尾数字长p和阶码字长和阶码字长q,并根据,并根据总字长的要求,恰当分配总字长的要求,恰当分配p与与q2.1.4 2.1.4 浮点数的舍入处理浮点数的舍入处理浮点数要进行舍入处理的原因是:浮点数要进行舍入处理的原因是:(1)十进制数转化为浮点数时,有效位长度超过给定的尾数字长。(2)两个浮点数的加减乘除结果,尾数长度超过给定的尾数字长。舍入处理要解决的问题是:舍入处理要解决的问题是:把规格化尾数的把规格化尾数的pg位处理成只有位处理成只有p位。位。其中:p是浮点数表示方式给定的尾数字长,g是超过给定尾数字长的部分。舍入方法的主要性能标准是:舍入方法的主要性能标准是:绝对误差小,绝对误差小,积累误差小,积累误差小,容易实现。容易实现。进行舍入处理时要注意的问题是:进行舍入处理时要注意的问题是:必须先规格化,然后再舍入必须先规格化,然后再舍入,否则舍入是没有意义的。在计算积累误差时,要同时考虑到正数区和负数区的情况。方法方法1 1:恒舍法:恒舍法 又称截断法、必舍法等又称截断法、必舍法等优缺点:优缺点:实现非常容易。实现非常容易。误差大,正负区误误差大,正负区误差相反,但同一区误差积累。差相反,但同一区误差积累。方法方法2 2:恒置法:恒置法 恒置r/2法、冯诺依曼法规则:规则:把有效字长的最低一位置成把有效字长的最低一位置成r/2r/2。优缺点:优缺点:实现比较容易,积累误差较小,正实现比较容易,积累误差较小,正负区误差平衡。负区误差平衡。精度比较低。精度比较低。方法方法3 3:下舍上入法:下舍上入法 4 4舍舍5 5入法、入法、0 0舍舍1 1入法等入法等优缺点:优缺点:精度高,积累误差小,正负区误差完精度高,积累误差小,正负区误差完全平衡。全平衡。实现起来比较困难。实现起来比较困难。方法方法4:R*舍入法舍入法 只有少数巨型机采用只有少数巨型机采用优缺点:优缺点:没有积累误差,精度很高。没有积累误差,精度很高。实现很复实现很复杂。判断杂。判断g是否为是否为10.0,采用下舍上入法或恒,采用下舍上入法或恒置法,如果溢出,可能要再次右规格化。置法,如果溢出,可能要再次右规格化。方法方法5 5:查表法:查表法 ROMROM舍入法,舍入法,PLAPLA舍入法等舍入法等优缺点:优缺点:通过修改通过修改ROMROM或或PLAPLA,使积累误差达,使积累误差达到平衡。到平衡。继承了下舍上入法继承了下舍上入法精度高精度高、积累误积累误差小差小的优点,同时又克服了实现困难的缺点的优点,同时又克服了实现困难的缺点 关于舍入方法的主要结论:关于舍入方法的主要结论:恒置法恒置法虽有少量的积累误差,且损失一位精度,但由于实现很容易,普遍在小型微型机中使用普遍在小型微型机中使用。R*R*舍入法舍入法是唯一积累误差能达到完全平衡的舍入方法,但由于实现非常复杂,仅在少数对误仅在少数对误差要求非常高的机器中采用差要求非常高的机器中采用。下舍上入法下舍上入法只有少量积累误差,且精度比较高,但实现很复杂,用于软件实现的算法中用于软件实现的算法中。查表法查表法实现比较容易,积累误差很小,且可以通过改变ROM或PLA中的内容来修正积累误差,是一种很有前途的舍入方法是一种很有前途的舍入方法。补码制中的舍入方法:补码制中的舍入方法:恒舍法在负数区和正数区的积累误差都是负误差,因此积累误差非常大。为使负数区为正误差,则要改用“恒入法”,实现起来非常困难。其余4种舍入方法的舍入规则保持不变。反码制中的舍入方法:反码制中的舍入方法:恒舍法保持与原码制中相同的舍入方法;恒置法在负数区要改为恒置反码法;下舍上入法在负数区要改为上舍下入法,如二进制中改为1舍0入法,且“入”是做减法;查表法和R*舍入法,负数区的舍入规则由正数区的规则经0、1交换和加、减交换后得到。2.1.5 2.1.5 警戒位的设置方法警戒位的设置方法 在规定的尾数字长之外,运算器中的累加器需要另外增加的长度称为警戒位(GuardBit)i)不设置警戒位,可能出现很大的误差不设置警戒位,可能出现很大的误差ii)警戒位的用处只有两个:警戒位的用处只有两个:(1)用于左规格化时移入尾数有效字长内。(2)用于舍入。警戒位的来源有以下几个方面:警戒位的来源有以下几个方面:(1)做加、减法时,因对阶从有效字长内移出去的部分。(2)做乘法时,双倍字长乘积的低字长部分。(3)做除法时,因没有除尽而多上商的几位。(4)右规格化时移出有效字长的那部分。(5)从十进制转换成二进制时,尾数超出有效字长的部分。2.1.6 2.1.6 自定义数据表示自定义数据表示 一般处理机中的数据表示方法一般处理机中的数据表示方法数据存储单元(寄存器、主存储器、外存储器等)只存放纯数据,数据的属性通过指令中的操作码来解释:数据的类型,如定点、浮点、字符、字符串、逻辑数、向量等;进位制,如2进制、10进制、16进制等;数据字长,如字、半字、双字、字节等;寻址方式,如直接寻址、间接寻址、相对寻址、寄存器寻址等;数据的功能,如地址、地址偏移量、数值、控制字、标志等;同一种操作(如加法)通常有很多条指令。在高级语言和应用软件中在高级语言和应用软件中数据的属性由数据自己定义;在高级语言与机器语言之间的语义差距,要靠编译器等填补。Burroughs公司在大型机中引入自定义数据表自定义数据表示方式和带标志符的数据表示方式示方式和带标志符的数据表示方式1.1.带标志符的数据表示法带标志符的数据表示法在B5000大型机中,每个数据有一位标志符在B6500和B7500大型机中,每个数据有三位来标志符在R-2巨型机中采用10位标志符R-2巨型机中的标志符巨型机中的标志符功能位:操作数、指令、地址、控制字陷井位:由软件定义四种捕捉方式封写位:指定数据是只读的还是可读可写类型位:二进制,十进制,定点数,浮点数,复数,字符串,单精度,双精度;绝对地址、相对地址、变址地址、未连接地址等。标志符由编译器或其它系统软件建立,对程标志符由编译器或其它系统软件建立,对程序员透明序员透明程序(包括指令和数据)的存储量分析程序(包括指令和数据)的存储量分析数据存储量增加,指令存储量减少。数据存储量增加,指令存储量减少。常规常规数据数据表示表示方法方法 与与带标带标志符志符数据数据表示表示方法方法 的的比较比较采用标志符数据表示方法的主要优点:采用标志符数据表示方法的主要优点:(1)简化了指令系统。(2)由硬件实现一致性检查和数据类型转换。(3)简化程序设计,缩小了人与计算机之间的语义差距。(4)简化编译器,使高级语言与机器语言之间的语义差距大大缩短。(5)支持数据库系统,一个软件不加修改就可适用于多种数据类型。(6)方便软件调试,在每个数据中都有陷井位。采用标志符数据表示方法的主要缺点:采用标志符数据表示方法的主要缺点:(1)数据和指令的长度可能不一致数据和指令的长度可能不一致可以通过精心设计指令系统来解决。(2)指令的执行速度降低指令的执行速度降低但是,程序的运行时间是由设计时间、编译时间和调试时间共同组成的。采用标志符数据表示方法,程序的设计时间、编译时间和调试时间可以缩短。(3)硬件复杂度增加硬件复杂度增加由硬件实现一致性检查和数据类型的转换。2.2.数据描述符表示法数据描述符表示法数据描述符与标志符的区别:标志符只作用于一标志符只作用于一个数据,而数据描述符要作用于一组数据。个数据,而数据描述符要作用于一组数据。Burroughs公司生产的B-6700机中采用的数据描述符表示方法。最高三位为101时表示数据描述符,最高三位为000时表示数据。例例2.2:用数据描述符用数据描述符表示方法表示方法 表示一个表示一个34的的矩阵:矩阵:2.2 2.2 寻址技术寻址技术寻找操作数及其地址的技术称为寻址技术寻找操作数及其地址的技术称为寻址技术 2.2.1 编址方式编址方式 2.2.2 寻址方式寻址方式 2.2.3 定位方式定位方式 重点:寻址方式的选择重点:寻址方式的选择2.2.1 2.2.1 编址方式编址方式对各种存储设备进行编码的方法。对各种存储设备进行编码的方法。主要内容:主要内容:编址单位、零地址空间个数、并编址单位、零地址空间个数、并行存储器的编址、输入输出设备的编址行存储器的编址、输入输出设备的编址1.1.编址单位编址单位常用的编址单位常用的编址单位:字编址、字节编址、位编址、块编址等编址单位与访问字长编址单位与访问字长一般:字节编址,字访问字节编址,字访问部分机器:位编址,字访问辅助存储器:块编址,位访问 字节编址字访问的优点:字节编址字访问的优点:有利于符号处理有利于符号处理 字节编址字访问的问题:字节编址字访问的问题:(1)地址信息浪费地址信息浪费 对于对于32位机器,浪费位机器,浪费2位地址位地址(最低最低2位地址位地址)对于对于64位机器,浪费位机器,浪费3位地址位地址 (2)存储器空间浪费存储器空间浪费 (3)读写逻辑复杂读写逻辑复杂 (4)大端大端(Big Endin)与小端与小端(Little Endian)问题问题(2)存储器空间浪费存储器空间浪费读一个字节读一个字节用多路选择器用多路选择器写一个字节写一个字节先读后写先读后写(3)读写逻辑复杂读写逻辑复杂 增加增加1个个align操作操作(4)大端大端(Big Endin)与小端与小端(Little Endian)问题问题2.2.零地址空间个数零地址空间个数三个零地址空间三个零地址空间:通用寄存器、主存储器、输入输出设备独立编址两个零地址空间两个零地址空间:主存储器与输入输出设备统一编址一个零地址空间一个零地址空间:最低端是通用寄存器,最高端是输入输出设备,中间为主存储器隐含编址方式:隐含编址方式:堆栈、Cache等3.3.并行存储器的编址技术并行存储器的编址技术高位交叉编址高位交叉编址:主要用来扩大存储器容量。低位交叉编址低位交叉编址:主要是提高存储器速度。4.4.输入输出设备的编址输入输出设备的编址一台设备一个地址一台设备一个地址:通过指令来区分地址,地址内部区分地址。一台设备两个地址一台设备两个地址:数据寄存器、状态或控制寄存器。多个编址寄存器共用同一个地址的方法:多个编址寄存器共用同一个地址的方法:依靠地址内部来区分,适用于被编址的寄存器的长度比较短“下跟法”隐含编址方式,必须按顺序读写寄存器。一台设备多个地址一台设备多个地址:增加编程的困难2.2.2 2.2.2 寻址方式寻址方式 寻找操作数及数据存放地址的方法寻找操作数及数据存放地址的方法1.1.寻址方式的设计思想寻址方式的设计思想立即数寻址方式立即数寻址方式 用于数据比较短,且为源操作数的场合用于数据比较短,且为源操作数的场合面向寄存器的寻址方式面向寄存器的寻址方式 OPCROPCR,ROPCR,R,ROPCR,M 面向主存储器的寻址方式面向主存储器的寻址方式:直接寻址、间接间接寻址、变址、变址寻址、相对寻址基址寻址、自动变址、OPCMOPCM,MOPCM,M,M面向堆栈的寻址方式面向堆栈的寻址方式:OPC;运算型指令OPCM;数据传送型指令2.2.寄存器寻址寄存器寻址主要优点:指令字长短,指令执行速度快,指令字长短,指令执行速度快,支持向量和矩阵等运算支持向量和矩阵等运算主要缺点:不利于优化编译,现场切换困难不利于优化编译,现场切换困难,硬件复杂硬件复杂3.3.堆站寻址方式堆站寻址方式主要优点:支持高级语言,有利与编译程序,节省存储空间,支持程序的嵌套和递归调用,支持中断处理主要缺点:运算速度比较低,栈顶部分设计成一个高速的寄存器堆4.4.间接寻址方式与变址寻址方式的比较间接寻址方式与变址寻址方式的比较目的相同:目的相同:都是为了解决操作数地址的修改都是为了解决操作数地址的修改原则上,一种处理机中只需设置间址寻址方式与变址寻址方式中的任何一种即可,有些处理机两种寻址方式都设置如何选取间址寻址方式与变址寻址方式?间址寻址方式与变址寻址方式?例例2.15:一个由N个个元素组成的数组,已经存放在起始地址为AS的主存连续单元中,现要把它搬到起始地址为AD的主存连续单元中。不必考虑可能出现的存储单元重叠问题。为了编程简单,采用一般的两地址指令编写程序。用间接寻址方式编写程序如下:用间接寻址方式编写程序如下:START:MOVE ASR,ASI ;保存源起始地址 MOVE ADR,ADI ;保存目标起始地址 MOVE NUM,CNT ;保存数据的个数 LOOP:MOVE ASI,ADIASI,ADI;传送一个数据 INC ASI ;源数组的地址增量 INC ADI ;目标数组地址增量 DEC CNT ;个数减1 BGT LOOP ;测试数据传送完?HALT ;停机 ASR:AS ;源数组的起始地址 ADR:AD ;目标数组的起始地址 NUM:N ;需要传送的数据个数 ASI:0 ;当前正在传送的源 ;数组地址 ADI:0 ;当前正在传送的目标 ;数组地址 CNT:0 ;剩余数据的个数 用变址寻址方式编写程序如下:用变址寻址方式编写程序如下:START:MOVE AS,X ;取源数组起始地址 MOVE NUM,CNT ;保存数据个数 LOOP:MOVE(X),AD-AS(X)(X),AD-AS(X);传送一个数据传送一个数据 INC X ;增量变址寄存器 DEC CNT ;个数减1 BGT LOOP ;测试数据传送完成 HALT ;停机 NUM:N ;传送的数据个数 CNT:0 ;剩余数据的个数 主要优缺点比较主要优缺点比较:(1)采用变址寻址方式编写的程序简单、易读。采用变址寻址方式编写的程序简单、易读。(2)对于程序员,两种寻址方式的主要差别是:对于程序员,两种寻址方式的主要差别是:间址寻址:间址寻址:间接地址在主存中,没有偏移量间接地址在主存中,没有偏移量 变址寻址:变址寻址:基地址在变址寄存器中基地址在变址寄存器中,有偏移量有偏移量 (3)实现的难易程度:间址寻址方式容易实现实现的难易程度:间址寻址方式容易实现 (4)指令的执行速度:间址寻址方式慢指令的执行速度:间址寻址方式慢 (5)对数组运算的支持:变址寻址方式比较好对数组运算的支持:变址寻址方式比较好 自动变址:自动变址:在访问间接地址时,地址自动增减前变址与后变址:前变址与后变址:变址与间址混合时前变址寻址方式:EA(X)A)后变址寻址方式:EA(X)(A)2.2.3 2.2.3 定位方式定位方式程序的主存物理地址在什么时间确定?采用什么方式来实现?程序需要定位的主要原因:程序需要定位的主要原因:程序的独立性程序的模块化设计数据结构在程序运行过程中,其大小往往是变化的有些程序本身很大,大于分配给它的主存物理空间主要的定位方式主要的定位方式直接定位方式:直接定位方式:在程序装入主存储器之前,程序中的指令和数据的主存物理就已经确定了的称为直接定位方式。静态定位:静态定位:在程序装入主存储器的过程中随即进行地址变换,确定指令和数据的主存物理地址的称为静态定位方式。动态定位:动态定位:在程序执行过程中,当访问到相应的指令或数据时才进行地址变换,确定指令和数据的主存物理地址的称为动态定位方式。2.3 2.3 指令格式的优化设计指令格式的优化设计 主要目标:节省程序的存储空间主要目标:节省程序的存储空间 指令格式尽量规整,便于译码指令格式尽量规整,便于译码 2.3.1 指令的组成指令的组成 2.3.2 操作码的优化设计操作码的优化设计 2.3.3 地址码的优化设计地址码的优化设计 2.3.4 指令格式设计举例指令格式设计举例2.3.1 2.3.1 指令的组成指令的组成一般的指令主要由两部分组成:一般的指令主要由两部分组成:操作码和地址码操作码和地址码地址码通常包括三部分内容:地址码通常包括三部分内容:地址:地址:地址码、立即数、寄存器、变址寄存器地址的附加信息:地址的附加信息:偏移量、块长度、跳距寻址方式:寻址方式:直接寻址、间接寻址、立即数寻址、变址寻址、相对寻址、寄存器寻址操作码主要包括两部分内容:操作码主要包括两部分内容:操作种类:操作种类:加、减、乘、除、数据传送、移位、转移、输入输出、程序控制、处理机控制等操作数描述:操作数描述:数据的类型:数据的类型:定点数、浮点数、复数、字符、字符串、逻辑数、向量进位制:进位制:2进制、10进制、16进制数据字长:数据字长:字、半字、双字、字节2.3.2 2.3.2 操作码的优化表示操作码的优化表示操作码的三种编码方法:操作码的三种编码方法:固定长度、固定长度、HuffmanHuffman编码、扩展编码编码、扩展编码优化操作码编码的目的:优化操作码编码的目的:节省程序存储空间节省程序存储空间例如:Burroughs公司的B-1700机1.1.固定长操作码固定长操作码定长定域定长定域:IBM公司的大中型机:最左边8位为操作码Intel公司的Intanium处理机:14位定长操作码许多RISC处理机采用定长操作码主要优点主要优点:规整规整 译码简单译码简单主要缺点主要缺点:浪费信息量浪费信息量(操作码的总长位数增加)2.Huffman2.Huffman编码法编码法1952年由Huffman首先提出操作码的最短平均长度最短平均长度可通过如下公式计算:pi表示第i种操作码在程序中出现的概率固定长编码相对于Huffman编码的信息冗余量信息冗余量:必须知道每种操作码在程序中出现的概率例例2.17:假设一台模型计算机共有7种不同的操作码,如果采用固定长操作码需要3位。已知各种操作码在程序中出现的概率如下表,计算采用Huffman编码法的操作码平均长度,并计算固定长操作码和Huffman操作码的信息冗余量。解答:解答:利用利用HuffmanHuffman树进行操作码编码树进行操作码编码 (又称最小概率合并法)(又称最小概率合并法)把所有指令按照操作码在程序中出现的概率把所有指令按照操作码在程序中出现的概率大小,自左向右顺序排列。大小,自左向右顺序排列。选取两个概率最小的结点合并成一个概率值选取两个概率最小的结点合并成一个概率值是二者之和的新结点,并把这个新结点与其是二者之和的新结点,并把这个新结点与其它还没有合并的结点一起形成一个新的结点它还没有合并的结点一起形成一个新的结点集合。集合。在新结点集合中选取两个概率最小的结点进在新结点集合中选取两个概率最小的结点进行合并,如此继续进行下去,直至全部结点行合并,如此继续进行下去,直至全部结点合并完毕。合并完毕。最后得到的根结点的概率值为最后得到的根结点的概率值为1 1。每个每个新新结点都有两个分支,分别用带有箭头结点都有两个分支,分别用带有箭头的线表示,并分别用一位代码的线表示,并分别用一位代码“0 0”和和“1 1”标注。标注。从根结点开始,沿尖头所指方向寻找到达属从根结点开始,沿尖头所指方向寻找到达属于该指令概率结点的最短路径,把沿线所经于该指令概率结点的最短路径,把沿线所经过的代码排列起来就得到了这条指令的操作过的代码排列起来就得到了这条指令的操作码编码。码编码。利用利用HuffmanHuffman树进行操作码编码树进行操作码编码利用利用HuffmanHuffman树进行操作码编码树进行操作码编码利用利用HuffmanHuffman树进行操作码编码树进行操作码编码利用利用HuffmanHuffman树进行操作码编码树进行操作码编码利用利用HuffmanHuffman树进行操作码编码树进行操作码编码利用利用HuffmanHuffman树进行操作码编码树进行操作码编码利用利用HuffmanHuffman树进行操作码编码树进行操作码编码利用利用HuffmanHuffman树进行操作码编码树进行操作码编码HuffmanHuffman操作码编码操作码编码解:采用解:采用HuffmanHuffman编码法的操作码平均长度为:编码法的操作码平均长度为:0.4510.3020.153 0.0540.0350.0160.016 1.97(位)操作码的最短平均长度为:0.451.1520.301.737 0.152.7370.054.322 0.035.0590.016.644 0.016.6441.95(位)采用采用3 3位固定长操作码的信息冗余量为:位固定长操作码的信息冗余量为:HuffmanHuffman编码法的信息冗余量仅为:编码法的信息冗余量仅为:与3位固定长操作码的信息冗余量35相比要小得多3.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)2(0.050.030.010.01)42.202-4等长扩展编码法信息冗余量为:2.3.3 2.3.3 地址码的优化表示地址码的优化表示1.1.地址码个数的选择地址码个数的选择地址码个数通常有3个、个、2个、个、1个及个个及个等4种情况评价指令中地址码个数应该取多少的标准主要有两个:程序存储容量程序存储容量,包括操作码和地址码程序执行速度程序执行速度,以程序执行过程中访问主存的信息量代表通过一个典型例子来分析:例如:计算一个典型的算术表达式例如:计算一个典型的算术表达式:用三地址指令编写的程序如下:用三地址指令编写的程序如下:MUL X,A,B ;X(A)MUL X,A,B ;X(A)(B)(B)ADD X,X,C ;X(X)ADD X,X,C ;X(X)(C)(C)SUB X,X,D ;SUB X,X,D ;分子的计算结果在中分子的计算结果在中 ADD Y,E,F ;ADD Y,E,F ;计算分母计算分母,存入存入Y Y DIV X,X,Y ;DIV X,X,Y ;最后结果在最后结果在X X单元中单元中用普通二地址指令编写的程序:用普通二地址指令编写的程序:MOVE X,A ;MOVE X,A ;复制临时变量到复制临时变量到X X中中 MUL X,BMUL X,B ADD X,C ADD X,C SUB X,D ;X SUB X,D ;X中存放分子运算结果中存放分子运算结果 MOVE Y,E ;MOVE Y,E ;复制临时变量到复制临时变量到Y Y中中 ADD Y,F ;YADD Y,F ;Y中存放分母运算结果中存放分母运算结果 DIV X,Y ;DIV X,Y ;最后结果在最后结果在X X单元中单元中用多寄存器结构的二地址指令编写程序:用多寄存器结构的二地址指令编写程序:MOVE R1,A ;MOVE R1,A ;操作数操作数a a取到寄存器取到寄存器R1R1中中 MUL R1,BMUL R1,B ADD R1,C ADD R1,C SUB R1,D ;R1 SUB R1,D ;R1中存放分子运算结果中存放分子运算结果 MOVE R2,EMOVE R2,E ADD R2,F ;R2 ADD R2,F ;R2中存放分母运算结果中存放分母运算结果 DIV R1,R2 ;DIV R1,R2 ;最后结果在最后结果在R1R1中中 MOVE X,R1 ;MOVE X,R1 ;最后结果存入最后结果存入X X中中用一地址指令编写的程序:用一地址指令编写的程序:LOAD E ;LOAD E ;先计算分母,先计算分母,;取一个操作数到累加器中取一个操作数到累加器中 ADD F ;ADD F ;分母运算结果在累加器中分母运算结果在累加器中 STORE X ;STORE X ;保存分母运算结果到保存分母运算结果到X X中中 LOAD A ;LOAD A ;开始计算分子开始计算分子 MUL BMUL B ADD C ADD C SUB D ;SUB D ;累加器中是分子运算结果累加器中是分子运算结果 DIV X ;DIV X ;最后运算结果在累加器中最后运算结果在累加器中 STORE X ;STORE X ;保存最后运算结果到保存最后运算结果到X X中中用用0 0地址指令编写程序:地址指令编写程序:ab*c+d-ef+/ab*c+d-ef+/PUSH A ;PUSH A ;操作数操作数a a压入堆栈压入堆栈 PUSH B ;PUSH B ;操作数操作数b b压入堆栈压入堆栈 MUL ;MUL ;栈顶两数相乘栈顶两数相乘,结果压回堆顶结果压回堆顶 PUSH CPUSH C ADD ADD PUSH D PUSH D SUB ;SUB ;栈顶是分子运算的结果栈顶是分子运算的结果 PUSH EPUSH E PUSH F PUSH F ADD ADD DIV ;DIV ;栈顶是最后运算的结果栈顶是最后运算的结果 POP X ;POP X ;保存最后运算结果保存最后运算结果关于地址码个数结论:关于地址码个数结论:对于一般商用处理机,采用多寄存器结构的对于一般商用处理机,采用多寄存器结构的二地址指令是最理想的。二地址指令是最理想的。如果强调硬件结构简单,并且以连续运算如果强调硬件结构简单,并且以连续运算(如求累加和等)为主,宜采用一地址结构。(如求累加和等)为主,宜采用一地址结构。对于以向量、矩阵运算为主的处理机,最好对于以向量、矩阵运算为主的处理机,最好采用三地址结构。采用三地址结构。部分部分RISCRISC处理机也采用三地址指令。处理机也采用三地址指令。对于解决递归问题为主的处理机,宜采用零对于解决递归问题为主的处理机,宜采用零地址结构。地址结构。编程容易、节省程序存储量。编程容易、节省程序存储
展开阅读全文