第2章指令系统指令系统:CPU命令的集合,是软件、硬件的分界面。关键问题:数据表示和寻址方式本章主要从计算机系统的分析和设计角度,讨论怎样对指令系统进行优化,目标为:怎样提高指令的执行速度?怎样减少指令占用的存储空间?用怎样的格式表示数据具有范围大、精度高、效率高、便于硬件实现?对编译系统和操作系统的支持良好2.1数据表示数据表示:研究计算机硬件能够直接辨认与处理的数据类型所谓“硬件能够直接辨认与处理”,指的是对该数据类型的各种运算操作都有相应的实现硬件电路。通常数据表示涉及的数据类型有整数、实数、逻辑数、浮点数、字符串等。数据结构:研究应用领域中的各种复杂数据类型。如:队列、链表、图、树、文件等,研究它们的存储、处理、运算方法,并给出相应的算法。计算机系统结构主要研究数据表示,主要为浮点数的表示2.1.1浮点数据表示浮点数据就是高级语言课程中所说的“实型数”。定点数据表示的缺点:编程困难表示数的范围小数据存储单元的利用率低(大量的前置0,造成浪费)浮点数表示方式要研究的核心内容:数据长度与表数范围、表数精度和表数效率之间的关系。2.1.1.1浮点数的组成浮点数的组成与“科学记数法”非常相似,但各部分均为有限位数:emrmN其中:N浮点数m尾数的值,纯小数,符合规格化原则(最高位的绝对值不为0)e阶码的值,整数,常用移码表示r基值,常见的有2进制、8进制、16进制、10进制等浮点数的机内格式mfefem1位1位q位p位尾数的符号位阶码的符号位阶码的值阶码的基记为re尾数的值尾数的基,记为rm可见,表示浮点数需要8各参数:mf,ef,e,m,p,q,re,rm其中,p,q,re,rm是默认的,一经选定,不得改变。问题:怎样选则p,q,re,rm,使浮点数的表数范围、表数精度和表数效率达到最佳?2.1.1.2浮点数的表数范围表数范围由6个参数描述:最小负数-Nmin,最大负数-Nmax,最小正数Nmin,最大正数Nmax、最小绝对值|N|min,最大绝对值|N|maxNminNmax-Nmin-Nmax0-∞∞下溢上溢上溢例2.1分析规格化浮点数的表数范围。对于规格化浮点数,尾数为原码(纯小数,即最高位的绝对值不为0),阶码为移码(整数)表数范围:11)1(||qeqermpmrmmrrNrr分析:Nmax:尾数取最大正数、阶码取最大正数Nmin:尾数取最小正数、阶码取最小负数-Nmax:尾数取最大负数、阶码取最小负数-Nmin:尾数取最小负数、阶码取最大正数例如:p=23,q=7,rm=2,re=2,则:122321772)21(||22N即:127231292)21(||2N例2.2分析尾数用补码表示时的表数范围。正数区间:与规格化浮点数相同负数区间:qeqermpmmrmrrrNr)(11例如:p=6,q=6,rm=16,re=2,则:126216616)161(1616N正数区间:负数区间:64616316)1616(16N尾数用补码表示便于加减运算,但是不便于乘除运算。例2.3对规格化浮点数,分析尾基rm和阶码长度对表数范围的影响。qermrN||max与rm=2时比较,比值T为:分析:阶码的字长每增1位,阶码的最大值增1倍尾基从2增到rm时,阶码的的最大值增倍其中,对规格化浮点数,最大绝对值:1212222222122qqqqkmrTqqmr,阶码长度为尾基为,阶码长度为尾基为mrk2logmr2log2.1.1.2浮点数的表数精度浮点数集:计算机中的浮点数是不连续的。一种浮点数能表示的所有浮点数称为浮点数集。浮点数的表数误差定义:设M、N是浮点数集中的两个相邻的数,则绝对表数误差||NM相对表数误差NNM由于浮点数随着阶码e增大而增大,分布不均匀,绝对表数误差具有不确定性。分析中一般采用相对表数误差,与阶码e无关。例2.4对规格化浮点数,分析尾基rm对表数精度的影响。规格化浮点数的表数精度:)1(21),(pmmrpr尾基为2时:ppp2221),2()1((1)(2)将(2)代入(1):prmmpr22),(1log2(3)分析:在尾数长度不变下,当尾基为2时,最小。当尾基2时,表数精度损失倍.1log22mr直观解释:尾基为2时,规格化浮点数的为数无前导0;尾基2时,规格化浮点数的为数大多有前导0。2.1.1.3浮点数的表数效率规格化浮点数:尾数最高位为非0。在运算中,可能出现非规格化的浮点数,因此,浮点数表示方法是一种冗余数制。为了提高数据的信息利用率,总是希望非规格化浮点数的个数尽量少,为此,必须研究浮点数表示方式的表数效率问题。定义浮点数的表数效率定义为:qepmqepmmrrrrr2212)121(全部浮点数个数规格化浮点数个数化简,并忽略机器0:mmrr1现考察尾基=2时的情况:%50212)2(信息利用率很低。而尾基=16时,%9416116)16(分析:当rm=16时,只需尾数的最高4个二进制位不全为0,所表示的浮点数只有1/16不是规格化浮点数。原因:规格化的尾数最高位只能有rm-1种取值。如果尾基=2时,尾数最高位只用1种取值,则表数效率将提高到100%办法:采用隐藏位技术方案隐藏位技术是一种提高表数效率的方法,但仅适用于rm=2的情况。尾数最高位m1在二进制条件下只有0和1两种可能,按照规格化要求,尾数是纯小数,且m1必须为1。因此,可以不记录m1,即尾数只存储后面p-1位,即“隐藏”m1。在运算中默认m1为1。这样,使尾基为2使的表数效率(2)=100%。浮点数性能小结:采用规格化浮点数,阶码为移码,尾基=2,并结合隐藏位技术,使表数范围、表数精度和表数效率达到最佳。2.1.1.3浮点数的舍入处理在进行舍入处理时注意:必须先进行规格化,然后再舍入。1.恒舍法(截断法)规则:假定舍入前规格化尾数为0.xx…xyy…y则无论g位是什么,一律舍弃,只保留p位代码作为尾数。优点:实现容易。缺点:积累误差大,在运算精度要求高的场合不宜采用。例:尾数:0.0110110111111规格化:0.11011011111110恒舍法处理:0.110110111误差:0.0000000001111p位有效字长g位待舍去2.恒置法(又称恒置1法)规则:把规格化尾数有效字长p位的最低一位置r/2,而不管超过有效字长之外的g位代码是什么。缺点:表数精度较低。优点:实现比较容易,在正数区和负数区的积累误差都比较小,而且能达到平衡舍入规则。应用于各种计算机系统中。例:误差最大时的情况规格化尾数:0.1101101100000恒舍法处理:0.110110111误差:0.0000000010000例:误差最小时的情况规格化尾数:0.1101101101111恒舍法处理:0.110110111误差:0.00000000000013.下舍上入法舍入规则:以g位代码的中间值为界,小于这个中间值的则舍,大于或等于的则入。优点:精度高,积累误差小,在正数区和负数区的积累误差达到完全平衡。缺点:实现较困难,主要用于软件实现的浮点运算中。4.R*舍入法在下舍上入法中,若舍入部分为10…0,则做恒值1。优点:完全无积累误差,缺点:实现复杂,目前只有少数巨型计算机采用5.查表法由有效字长的最低2为和舍掉部分的最高位组成索引,从表中查出舍入结果。继承了3的优点,又克服了它的缺点。2.1.4警戒位的设置方法在规定的尾数字长之外,运算器中的累加器需要另外增加的长度称为警戒位(GuardBit)不设置警戒位,可能出现很大的误差,如:0.10000000×20对阶:+1.10000001×20求和:0.00000001×20左规:+0.10000000×2-70.10000000×20对阶:+1.100000011×20求和:0.000000011×20左规:0.11000000×2-70.10000000×20-0.11111101×2-1不设置警戒位时:设置警戒位时:不设置警戒位,可能造成完全错误的运算结果。如:0.1000×2125-0.1111×21240.1000×2125对阶:+1.1000×2125求和:0.0000×21250.1000×2125对阶:+1.10001×2125求和:0.00001×2126左规:0.1000×2121不设置警戒位时:设置警戒位时:警戒位的用处:(1)用于左规格化时移入尾数有效字长内。(2)用于舍入。警戒位的来源有以下几个方面:(1)做加、减法时,因对阶从有效字长内移出去的部分。(2)做乘法时,双倍字长乘积的低字长部分。(3)做除法时,因没有除尽而多上商的几位。(4)右规格化时移出有效字长的那部分。(5)从十进制转换成二进制时,尾数超出有效字长的部分。1.加减法(1)同号尾数相加、异号尾数相减,不必设置警戒位;原因:结果的绝对值2,不需要左规格化。(2)同号尾数相减、异号尾数相加,若阶差为0,不必设置警戒位;若阶差为1,只需设置1位警戒位;若阶差1,只需设置1位警戒位用于左规。结论:两个规格化尾数的加减法运算,最多只需设1位警戒位例:0.10000×20-0.11111×2-2p=5g=20.1000000×20对阶+1.1100001×20求和0.0100001×20左规0.1000010×20舍入0.100012、乘法设两个规格化尾数为mA、mB,1/rm≤|mA,mB|1,则两数乘积:1/rm≤|mA×mB|1说明两个规格化尾数的乘积最多左规一位。结论:只需要设置一个警戒位。3、除法设两个规格化尾数为mA、mB,1/rm≤|mA,mB|1,则尾数的商:1/rm≤|mA/mB|rm,两个规格化尾数的商不需要左规格化。结论:不必设置警戒位。4、当浮点尾数基值大于2时,用于舍入的最低位只需设置一个二进制位。各种情况下所需要的警戒位位数:恒舍法0位110001位恒置法-1位00-1-1-10位下舍上入法1位221112位查表法1位221112位R*舍入法1位332223位总计加减法1位乘法1位除法0位右规0位十化二0位用于左规用于舍入2.2寻址技术寻找操作数及其地址的技术称为寻址技术本节主要研究内容:编址方式寻址方式定位方式重点:寻址方式的选择2.2.1编址方式编址方式:对各种存储设备进行编码的方法;包括编址单位,零地址空间的个数等。访问方式:字访问1、编址单位:字编址每个编址单位所包含的信息量与访问一次设备所获得的信息量相同优点:实现简单,地址信息,存储器容量等没有任何浪费。缺点:没有对非数值计算的提供支持。字节编址适应非数值计算的需要,能够使编址单位与信息的基本单位相一致。优点:能够保证无论是何字,都能在一个存储周期内完成。缺点:读写控制逻辑比较复杂。目前大多数计算机采用字节编址字节半字双—字单字字节半字单字字节单—字…注:字节:8bit;半字:16bit;单字:32bit;双字:64bit…xx00…xx08…xx10…xx18…xx20字长:64位不浪费存储器的存储方式。一个数据可能跨越2个存储单元,此时需要两个访问周期;读写控制复杂字节浪费浪费单字浪费半字浪费双字……xx00…xx08…xx10…xx18…xx20字长:64位从存储字的起始位置开始存放。读写控制简单;浪费大量的存储资源。字节浪费双字半字浪费双字字节浪费单字半字浪费单字字节浪费半字……xx00…xx08…xx10…xx18…xx20…xx28…xx30字长:64位不跨越存储单元的存储方式保证读写访问为一个周期存储资源利用较充分,但仍有一定的浪费;读写控制比较复杂。2、零地址空间:在计算机中需要编址的设备主要有运算器中的通用寄存器、主存储器和输入输出设备等三种。堆栈不需要编址。对这几种存储设备的编址有以下几种:(1)三个零地址空间三种