《计算机组成原理(华科版)第二章 运算方法与运算器》由会员分享,可在线阅读,更多相关《计算机组成原理(华科版)第二章 运算方法与运算器(120页珍藏版)》请在金锄头文库上搜索。
1、第二章 运算方法与运算器2.1 2.1 数据信息的表示方法数据信息的表示方法真值与机器数采用正、负符号加上二进制的绝对值,则这种数值称为真值。将正负号分别用一位数码0和1来代替,一般将这种符号位放在数的最高位。这种在机器中使用的连同数符一起数码化的数,称为机器数。真值与机器数例:设机器字为8b字长,数N1的真值为( +1001110)2, 数 N2的 真 值 为 ( -1001110)2,则N1 、N2对应的机器数为: N1 0 1 0 0 1 1 1 0 N2 1 1 0 0 1 1 1 0 符号 数 值 部 分数的转换数的转换例例2-1 2-1 将将十十进进制制数数26.4126.41转转
2、换换成成二二进进制制数数,八八进进制制数数、十十六六进进制数。制数。解:解: 转换成二进制数的过程如下,转换成二进制数的过程如下,整整数数除除2 2取取余余 (余余数数) ( 整整数数 )小小数数乘乘2 2取取整整。 26 .4126 .4113 0 0 .8213 0 0 .826 1 1 .646 1 1 .643 0 1 .283 0 1 .281 1 0 .561 1 0 .560 1 1 .120 1 1 .12 1010=1 1 0 1 0.=1 1 0 1 0. 0 1 1 0 10 1 1 0 12 2 数的机器码表示数的机器码表示通常有原码、补码、反码和移码四种表示法。通常有
3、原码、补码、反码和移码四种表示法。原码表示法原码表示法 其其最最高高位位作作为为符符号号位位,用用“0 0”表表示示正正号号,用用“1 1”表表示示负负号号, ,有有效效值值部部分分用用二二进进制制的的绝绝对对值值表表示示。例例如如,若若x x1 1=+0.1011 =+0.1011 x x2 2=-0.1011, =-0.1011, 字字长长为为8 8b b,则则其其原原码码分分别别为:为: x x1 1 原原=0.1011000 =0.1011000 x x2 2 原原原码有正零和负零两种形式:原码有正零和负零两种形式:+0+0原原=0.00=0.00 00 00 -0 -0原原=1.00
4、=1.00 00 00 补码表示法由于补码在作二进制加、减运算时较方便由于补码在作二进制加、减运算时较方便, ,所以所以在计算机中广泛采用补码表示二进制数。在计算机中广泛采用补码表示二进制数。补码运算中,可以用加法代替减法,节省元件,补码运算中,可以用加法代替减法,节省元件,降低成本。降低成本。补码表示法原原码码求求补补码码方方法法:正正数数不不变变(相相同同)。负负数数符符号号位位不不变变,数值位求反加数值位求反加1 1例例如如,若若x x1 1=+0.1011=+0.1011,x x2 2=-0.1011, =-0.1011, 字字长长为为8 8b b,则则其其补补码码分分别为别为 x x
5、1 1 原原=0.1011000 =0.1011000 x x1 1 补补=0.1011000 =0.1011000 x x2 2 原原=1.1011000 =1.1011000 x x2 2 补补补码的零只有一个即补码的零只有一个即0.00000000.0000000。 反码表示法对对于于正正数数来来说说,反反码码与与原原码码、补补码码的的表表示示形形式式相相同同。对对于于负负数数来来说说,符符号号位位与与原原码码、补补码码的的符符号号位位定定义义相相同同。而而数数值值只只是是将将原原码码的的数数值值位位按按位位变变反反就就得得到到了该数的反码表示。了该数的反码表示。例如,若例如,若x x1
6、 1=+0.1011 x=+0.1011 x2 2=-0.1011, =-0.1011, 字长为字长为8 8b b, x x1 1 反反=0.1011000= =0.1011000= x x1 1 原原= = x x1 1 补补 x x2 2 反反=1.0100111 =1.0100111 x x2 2 补补=1.0101000 =1.0101000 x x2 2 原原 移码 移码也叫增码,它常以整数形式用在计算机浮点数的阶码(表示指数)中。若纯整数X为n位(包括符号位),则其移码定义为: x移=2n-1+x补 -2n-1X2n-1-1补码将符号位求反可得移码。补码将符号位求反可得移码。设字长
7、为设字长为8 8b b,若若x=+1000x=+1000(2)(2), xx补补=00001000 =00001000 xx移移=10001000=10001000 若若x=-1000x=-1000(2)(2), xx补补=11111000 =11111000 xx移移= 01111000= 01111000数的定点表示 计算机中小数的小数点并不是用某个数字来表示的,而是用隐含的小数点的位置来表示。根据小数点的位置是否固定,又可分为定点表示和浮点表示。其中定点表示形式又分为定点小数表示形式和定点整数表示形式。数的定点表示 定点小数 将小数点固定在符号位d0之后,数值最高位d-1之前,这就是定点
8、小数形式。其格式如下所示: d0 d-1 d-2 d-(n-1) 定点整数 将小数点固定在数的最低位之后,这就是定点整数形式。其格式如下所示: d0 d-1 d-2 . d-(n-1) 定点小数的表示范围:设字长为8b,用原码表示时,其表示范围如下: 最小负数 最大负数 最小正数 最大正数 -(1-2) -27 27 1-27 设字长为8b,用补码表示时,其表示范围如下: 最小负数 最大负数 最小正数 最大正数 -1 -27 27 1-27 定点整数的表示范围: 设字长为8b,用原码表示时,其表示范围如下: 最小负数 最大负数 最小正数 最大正数 11111111 10000001 00000
9、001 01111111-(27-1)=-127 -1 +1 27-1=127 设字长为8b,用补码表示时,其表示范围如下: 最小负数 最大负数 最小正数 最大正数 10000000 11111111 00000001 01111111 -27=-128 -1 +1 27-1=127 (1)综上所述,用原码表示时,由于真值零占用了两个编码,因此n位二进制只能表示2n-1个原码。原码表示的优点是:数的真值与它的原码之间的对应关系简单、直观、转换容易,但用原码实现加减运算很不方便。 (2)在补码系统中,由于零有唯一的编码,因此,n位二进制能表示2n个补码,采用补码表示比用原码表示可多表示一个数。补
10、码在机器中常用于作加、减运算。数的浮点表示法 浮点数的表示格式 浮点表示法把字长分成阶码(表示指数)和尾数(表示数值)两部分。其格式如下(第一种浮点格式): J Em-1E1 S D-1D-(n-1) 阶符 阶码值 数符 尾数值 补码表示 补码表示 阶码部分共分为m位,其中J为阶符(即指数部分的符号位),Ei为阶码值(表示幂次);基数R是隐含约定的,通常取2;尾数部分共分为n位,其中S是尾数部分的符号位,D-1D-(n-1)为尾数值部分。假设阶码为E,尾数为D,基数为2,则这种格式存储的数X可表示为X=D2E。 实际应用中,阶码通常采用补码或移码定点整数形式,尾数通常用补码定点小数形式。浮点表
11、示法还有另一种(即第二种浮点格式)表示格式,将数符放在最高位,即 S J Em-1E1 D-1D-(n-1) 数符 阶符 阶码值 尾数值 移码表示 补码表示 浮点数的规格化 为了使浮点表示法有尽可能高的精度,措施之一是增加位数或者是在字长一定的情况下,将阶码和尾数所占的位数协调好;措施之二是采用浮点数规格化表示。那么什么是浮点数规格化呢?这就是通过调整阶码,使其尾数D满足下面形式的数: 原码规格化后 正数为 0.1的形式。 负数为 1.1的形式。 补码规格化后 正数为 0.1的形式。 负数为 1.0的形式。 浮点数的表示举例 某机用32b表示一个数,阶码部分占8b(含一位符号位),尾 数 部
12、分 占 24b( 含 一 位 符 号 位 ) 。 设 x1=-256.5 ,x2=127/256,试写出x1和x2的两种浮点数表示格式。 解: x1=-256.5= -(100000000.1)2=-29 阶码的补码为(+9)补=00001001 阶码的移码为(+9)移=10001001 第一种浮点表示的格式为 第二种浮点表示的格式为 浮点数的表示举例 某机用32b表示一个数,阶码部分占8b(含一位符号位),尾数部分占24b(含一 位 符 号 位 ) 。 设 x1=-256.5 ,x2=127/256,试写出x1和x2的两种浮点数表示格式。 解 x2=127/256= (1111111)22-
13、8=2-1 阶码的补码为(-1)补=11111111 阶码的移码为(-1)移=01111111 第一种浮点表示的格式为 第二种浮点表示的格式为 浮点数的表示范围 设阶码和尾数各为4b(各包含一个符号位),则其浮点数的表示表示范围分别为: 阶码范围 最小负数 最大负数 最小正数 最大正数 1000 1111 0001 0111 -27=-8 -1 +1 23-1=7 规格化尾数表示范围 最小负数 最大负数 最小正数 最大正数 -1 -(23+21 ) 21 1-23 规格化浮点数表示范围 最小负数 最大负数 最小正数 最大正数 201111.000 210001.011 210000.100 2
14、0111 211111.000 200001.011 200000.100 21111 -271 -2-8(23+21 ) 2-821 27(1-23)0不是规格化数,所以规格化尾数的最大负数应是 :01 ,1补1 ,即 -(2(n-1)+21 )(5) 溢出问题 定点形式判断溢出的办法是对数值本身进行判断,而浮点数是对规格化后的阶码进行判断。当一个浮点数阶码大于机器的最大阶码,称为上溢;而小于最小阶码时,称为下溢。机器产生上溢时,不能再继续运算,一般要进行中断处理。出现下溢时,一般规定把浮点数各位强迫为零(当做零处理),机器仍可继续进行运算。字符的表示 ASCII码 (American St
15、andard Code For Information Interchange,美国国家信息交换标准字符码) 。ASCII共有128个字符,其中95个编码(包括大小写各26个英文字母,(09)10个数字符,标点符号等)对应着计算机终端能敲入并可以显示这95个字符,打印机也可打印出这95个字符。另外的33个字符是被用做控制码,控制计算机某些外围设备的工作特性和某些计算机软件运行情况。ASCII码 在计算机中,用1B(一个字节)表示一个ASCII码,其最高一位(b7位)填0,余下的7b可以给出128个编码,表示128个不同的字符和控制码。但当进行奇偶校验时,也可以用最高位(b7)作为校验位。 如A
16、的ASCII码为: 1000001=01000001=(41)16=65 如a的ASCII码为: 1100001=01100001=(61)16=97汉字的表示 (1)汉字的输入 输入码是为使输入设备能将汉字输入到计算机而专门编制的一种代码。目前已出现了数百种汉字输入方案,常见的有国标码、区位码、拼音码和五笔字型等。 (2)汉字在机内的表示 机内码是指机器内部处理和存储汉字的一种代码。目前国内还没有制定统一的汉字机内码,常用的一种汉字机内码是用2B表示一个汉字的。它是在国标码的基础上,在每个字节的最高位置“1”作为汉字标记而组成的。 机内码与国标之间的转换关系为:机内码(十六进制)国标码(十六
17、进制)8080H。例如, “京”字的国标码为3E29H,其机内码为BEA9H。(3)汉字的输出与汉字字库 显示器是采用图形方式(即汉字是由点阵组成)来显示汉字的。但由于汉字字形复杂,用显示西文字符的88点阵已无法显示一些常用的汉字,每个汉字至少需要1616的点阵才能显示。图2.1所示的是用1616点阵显示一个汉字的例子。 对于这种1616点阵码,每个汉字要用32B的容量,它是最简单的汉字点阵。若要获得更美观的字形,需采用2424,3232,4848等点阵来表示。一个实用的汉字系统大约占几十万到上百万个存储单元。一般常用的汉字输出有打印输出和显示输出两种形式。输出汉字的过程为:输入码转换为机内码
18、,然后用机码检索字库,找到其字形点阵码,再输出汉字, 键盘 输入码处理 汉字机内码 字形 汉字字形点阵 显示 转换程序 2B 检索程序 32B 驱动程序 码表 汉字 CRT 字模库 显示器2.2 定点加减法运算2.2.1 定点补码加、减法与溢出概念 在计算机中,常将数值转换成补码后再进行加减运算。其优点是,可将减法运算转化为加法运算,这样可以简化机器内部硬件电路的结构。补码运算的特点是,符号位和数值位一起参加运算。补码加减运算规则(1)补码的加法运算补码的加法运算其公式为:其公式为: xx补补 yy补补 x xyy补补(2)补码的减法运算补码的减法运算其公式为其公式为 xx 补补 - - yy
19、 补补= = x - y x - y 补补= = x +x +(- y- y) 补补= = xx 补补 + - + -yy 补补只只要要能能通通过过 yy 补补求求得得-yy 补补,就就可可以以将将补补码码减减法法运运算算化化为为补补码码加加法法运运算算。已已知知 yy 补补,求求-yy 补补的的法法则则是是:对对 yy 补补各各位位(包包括括符符号号位位)取取反反,然然后后在末位加上在末位加上1 1。例如,已知例如,已知 yy 补补=1=110101010 则则-yy 补补=0=001100110又如,已知又如,已知 yy 补补=0=011101110 则则-yy 补补=1=10010001
20、0 加减法运算规则加减法运算规则参加运算的数都用补码表示。参加运算的数都用补码表示。数据的符号与数据一样参加运算。数据的符号与数据一样参加运算。求差时将减数求补,用求和代替求差。求差时将减数求补,用求和代替求差。运运算算结结果果为为补补码码。如如果果符符号号位位为为0 0,表表明明运运算算结结果果为为正正;如如果果符符号号位位为为1 1,则则表表明明运运算算结结果果为为负。负。符号位的进位为模值,应该丢掉。符号位的进位为模值,应该丢掉。2.补码加减运算举例例例1 1:已知机器字长:已知机器字长 n=8bn=8b,x=44x=44, y=53 y=53, 求求x+y=x+y=? 解:解: x=0
21、0101100 x=00101100 , y=00110101 y=00110101 x x 补补=00101100 =00101100 , yy 补补=00110101=00110101 xx 补补= 00101100= 00101100 + + yy 补补= 00110101= 00110101 x+yx+y 补补= 01100001 = 01100001 ( x+yx+y)2 2= +1100001 x+y = 97 = +1100001 x+y = 97 例例2 2 已知机器字长已知机器字长 n=8bn=8b,x=-44x=-44, y=-53 y=-53, 求求x-y=x-y=?解:
22、解: x=-00101100x=-00101100,y=-00110101y=-00110101 x x 补补=11010100=11010100, yy 补补=11001011=11001011 - -yy 补补=00110101=00110101 xx 补补= 11010100= 11010100 + - + -yy 补补= 00110101= 00110101 x-yx-y 补补= = 1 1 00001001 00001001 已超出模值,丢掉已超出模值,丢掉 ( x-y)2= +0001001 x-y = +9例如: 已知机器字长 n=8b,x=120, y=10, 求x+y=? 解
23、:解: x=+1111000 y=+00001010x=+1111000 y=+00001010 x x 补补=01111000 =01111000 yy 补补=00001010=00001010 xx 补补= = 0 011110001111000 + + yy 补补= = 0 000010100001010 x+yx+y 补补= = 1 10000010 0000010 运算结果符号与被加数符号相反,故产生了溢出。 判断溢出的方法是:两个符号相同的数相加,其运算结果的符号应与被加数符号、加数符号相同,如相反就产生了溢出现象;两个符号相异的数相减,其运算结果的符号应与被减数的符号相同,如相反
24、则有溢出发生。(1)双符号法(变形补码法) 用两个相同的符号位表示一个数的符号。左边第一位为第一用两个相同的符号位表示一个数的符号。左边第一位为第一符号位符号位S Sf1f1,相邻的为第二符号位相邻的为第二符号位S Sf2f2。 双符号位的含义为:双符号位的含义为:0000表示正号;表示正号;0101表示产生正向溢出;表示产生正向溢出;1111表示负号;表示负号;1010表示产生负向溢出。表示产生负向溢出。 双符号位可用逻辑异或来判断溢出情况:双符号位可用逻辑异或来判断溢出情况:V=SV=Sf1f1SSf2f2, , 若若V=0V=0,则无溢出;则无溢出;V=1V=1,则有溢出。则有溢出。 即
25、:运算结果的两个符号位相同,则没有溢出发生;即:运算结果的两个符号位相同,则没有溢出发生; 运算结果的两个符号位不同,则发生了溢出,第一符号位运算结果的两个符号位不同,则发生了溢出,第一符号位永远是结果的真正符号位。永远是结果的真正符号位。 例例1 1:已知:已知 x=0.1011 x=0.1011 , y=0.0111 y=0.0111, 求求x+y=x+y=?解:解: xx 补补=00.1011=00.1011, yy 补补 xx 补补 + + yy 补补 x+yx+y 补补= 01.0010 = 01.0010 两符号位为两符号位为0101,表示出现正向溢出。,表示出现正向溢出。例例2
26、2:已知:已知 x=-0.1011 x=-0.1011 , y=0.0111 y=0.0111, 求求x-y=x-y=?解:解: xx 补补=11.0101=11.0101,-yy 补补 xx 补补 + - + -yy 补补 x-yx-y 补补= = 1 1 10.1110 10.1110 已超出模值,丢掉已超出模值,丢掉 两符号位为两符号位为1010,表示出现负向溢出。,表示出现负向溢出。进位判断法 当当两两个个单单符符号号位位的的补补码码进进行行加加减减运运算算时时,若若最最高高数数值值位位向向符符号号位位的的进进位位值值C C与与符符号号位位产产生生的的进进位位输输出出值值S S 相相同
27、同,则则没没有有溢溢出出发发生生。如如果两个进位值不同,则有溢出发生。其判断溢出表达式如下:果两个进位值不同,则有溢出发生。其判断溢出表达式如下:V=SCV=SC例如:例如: xx 补补 + + yy 补补 x+yx+y 补补= 1 0.1110 = 1 0.1110 最最高高有有效效位位没没有有进进位位,即即C=0C=0,符符号号位位有有进进位位,即即S=1S=1,故故V=10=1V=10=1,有溢出发生。有溢出发生。 xx 补补 + + yy 补补 x+yx+y 补补= 1 0.0110 = 1 0.0110 最最高高有有效效位位有有进进位位,即即C=1C=1,符符号号位位有有进进位位,即
28、即S=1S=1,故故V=11=0V=11=0,无溢出发生,无溢出发生, x+y= + 0.0110 x+y= + 0.0110 。2.2.2 基本的二进制加、减法器(1)一位全加器)一位全加器设设x x和和y y两个操作数分别为两个操作数分别为 x xx xf f.x.xx xx x n n , y yy yf f.y.yy yY Yn n表25 一位全加器真值表Xi yi Ci-1 Si Ci 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 01 0 1 0 1 0 10 1 1 1 0 0 10 1 1 1 1 1 1 根据以上真值表可分别写
29、出Si和Ci的如下表达式:Si= xi yi Ci-1+ xi yi Ci-1+ xi yi Ci-1+ xi yi Ci-1= xi + yi + Ci-1 Ci= xi yi Ci-1+ xi yi Ci-1+ xi yi Ci-1+ xi yi Ci-1 = xiyi + (xi + yi) Ci-1 以上两式用“异或”门构成一位全加器,Ci&1&=1Si=1Ci1xiyiCiSixiyi COSi CICi1 串行进位的并行加法器 当操作数为n1位长时,需要用n1位全加器构成加法器, 真正的结果依赖于进位信号的逐位产生。加法器求和的时间是进位信号的产生和传递所占用的时间。 CnSnxn
30、yn COSn CICn1Sn1xn1yn1 COSn1 CICiSixiyi COSi CIC2S2x2y2 COS2 CIC1S1x1y1 COS1 CIC0 人们把xiyi称为进位传递函数或进位传递条件,并以Pi表示。而将xiyi称为进位产生函数或本地进位,并以Gi表示。所以,进位表达式又常表示为 Ci= xiyi + (xiyi) Ci-1 = Gi + Pi Ci-1 串行进位链的表达式为: C1= x1y1 + (x1y1) C0 = G1 + P1 C0 C2= x2y2 + (x2y2) C1 = G2 + P2 C1 C3= x3y3 + (x3y3) C2 = G3 + P
31、3 C2 Cn-1= xn-1y n-1 + (x n-1y n-1) C n-2 = G n-1 + P n-1 C n-2 Cn= xny n + (x ny n) C n-1 = G n + P n C n-1 从这组表达式中可以明显地看到,某位的进位信号的产生,依赖于低位进位信号的产生。要提高加法器的运算速度,就必须解决进位信号的产生和传递问题。 (2)并行进位的并行加法器 上式可以改写成如下形式: C1= G1 + P1 C0 C2= G2 + P2 C1= G2 + P2(G1 + P1C0) = G2 + P2G1 + P2P1C0 C3= G3 + P3 C2= G3 + P3
32、(G2 + P2C1) = G3 + P3G2 + P3P2G1 + P3P2P1C0 以此类推, C4= G4 + P4 C3= G4 + P4G3 + P4P3G2 + P4P3P2G1 + P4P3P2P1C0 Cn-1= G n-1 + P n-1G n-2 + P n-1P n-2G n-3 + P n-1P n-2P n-3P4P3P2G1 + P n-1P n-2P n-3P4P3P2P1C0 Cn= G n + P nG n-1 + P nP n-1G n-2+ + P nP n-1P n-2P4P3P2G1 + P nP n-1P n-2P4P3P2P1C0 各进位信号的产生
33、不再与低位的进位信号有关,而只与两个参加运算的数和C0有关。 组内并行、组间串行的进位链 这种进位链也称为单重分组跳跃进位。以16b加法器为例,一般可分作4 个小组,每小级4位,每组内部采用并行进位结构,组间采用串行进位传递结构。 这里以最低4b(第4b第1b)这一小组为例进行讨论。它们各位的进位表达式为 C1= G1 + P1 C0 C2= G2 + P2G1 + P2P1C0 C3= G3 + P3G2 + P3P2G1 + P3P2P1C0 C4= G4 + P4G3 + P4P3G2 + P4P3P2G1 + P4P3P2P1C0在这个小组里,来自低位的进位信号只有C0 ,由它送到高位
34、小组的进位信号只需送出C4即可。从这组表达式可得,这个小组组内的并行进位14)。线路(见图2. 图中用虚线围起来的部分可看成是一个逻辑网络,如图2.15所示。 组内并行、组间并行的进位链 这种进位链又称为多重分组跳跃进位链。仿照分析每一位进位信号的方法,将每个小组最高位的进位信号分成进位传送函数和进位生成函数两个部分: C4= G4 + P4G3 + P4P3G2 + P4P3P2G1 + P4P3P2P1C0 其中P4P3P2P1为小组的传送函数,记作Pi*。而前面4项与C0无关, 只与本小组内的Gi、Pi有关,所以称它们为第一小组的进位生成函数,记作Gi*,即 G1*= G4 + P4G3
35、 + P4P3G2 + P4P3P2G1 P1*= P4P3P2P1 因此 C4= G1*+ P1* C0 同理 C8= G2*+ P2* C4 C12= G3*+ P3* C8 C16= G4*+ P4* C12* 这是一组递推表达式,可将其展开为 C4= G1*+ P1*C0 C8= G2*+ P2*G1*+ P2*P1*C0 C12= G3*+ P3* G2*+ P3*P2*G1*+ P3*P2*P1*C0 C16= G4*+ P4* G3*+ P4*P3* G2*+ P4*P3*P2*G1*+ P4*P3*P2*P1*C0 用逻辑电路实现展开后的表达式,就可以构成组间并行的进位线路,即
36、第二重分组并行进位线路。 组内采用并行进位,组间也采用并行进位时,每个小组应产生本小组的进位生成函数Gi*和本小组的进位传递函数Pi*,以作为组间并行进位网络的输入变量,所以,小组内的并行进位线路应作适当的修改,即: 第一小组应产生G1*、 P1*、C1、C2、C3,而不在小组内产生C4。 第二小组应产生G2*、 P2*、C5、C6、C7,而不在小组内产生C8。 第三小组应产生G3*、 P3*、C9、C10、C11,而不在小组内产生C12。 第四小组应产生G4*、 P4*、C13、C14、C15,而不在小组内产生C16。 各小组的进位生成函数和进位传递函数的逻辑表达式为 G1*= G4 + P
37、4G3 + P4P3G2 + P4P3P2G1 G2*= G8 + P8G7 + P8P7G6 + P8P7P6G5 G3*= G12 + P12G11 + P12P11G10 + P12P11P10G9 G4*= G16 + P16G15 + P16P15G14 + P16P15P14G13 P1*= P4P3P2P1 P2*= P8P7P6P5 P3*= P12P11P10P9 P4*= P16P15P14P13 作如上修改后,仍以第一小组为例,组内的逻辑电路如图所示。ALU的原理 常见的产品有SN74181,它是4b片形的芯片,即一片能完成4 b数的算术运算和逻辑运算。还有8b、16b片
38、的ALU芯片。下面先介绍SN74181芯片, 然后讨论如何用它构成ALU。 (1)SN74181芯片 SN74181是一种具有并行进位的多功能ALU芯片,每片4b,构成一组,组内是并行进位,其芯片方框图如图2.19所示。(2)利用SN74181芯片构成16b ALU的原理 SN74181的结构很适合于将它们连成不同位数的ALU,每片SN74181芯片作为一个4b的小组,由于芯片给出了Cn+4、Pi*和Gi*,所以用该芯片既可构成组间串行进位的ALU,也可以构成组间并行的ALU。 组间串行进位的16b ALU的构成 组间并行进位的16b ALU的构成 需增加一片SN74182芯片。 SN7418
39、2与SN74181 配套的产品,是一个产生并行进位信号的部件。由于SN74181 提供了小组的进位传递函数Pi*和进位生成函数Gi*,SN74182可以利用它们作输入参数,以并行的方式给出每个小组(芯片)的最高位进位信号。SN74182在这里的用途是作为第2级并行进位系统。SN74182的逻辑框图如图2.21所示。2.3 移位运算 移位运算是计算机中非常重要的基本运算之一,计算机中移位运算和加减运算相结合可实现乘除运算。移位运算分逻辑移位、算术移位和循环移位三大类。2.3.1 逻辑移位 无符号数的移位称为逻辑移位。逻辑移位规则为: (1)逻辑左移时将寄存器的每一位数据向左移动一个位置,最低位补
40、0,最高位移至进位位。 (2)逻辑右移时将寄存器的每一位数据向右移动一个位置,最低位移至进位位,最高位补0。 (3)不论是定点整数还是定点小数,逻辑左移相当于将原数值乘以2,而逻辑右移相当于将原数值除以2。2.3.2 算术移位有符号数的移位称为算术移位。算术移位时需考虑正、负数及不同编码对应的规则,表2-7给出了三种不同码制的移位规则。2.3.3 循环移位规则 小循环移位小循环移位 小循环左移:最高位移至进位位,同时移至最低位。小循环左移:最高位移至进位位,同时移至最低位。 小循环右移:最低位移至进位位,同时移至最高位。小循环右移:最低位移至进位位,同时移至最高位。大循环移位大循环移位 大循环
41、左移:最高位移至进位位,进位位移至最低位。大循环左移:最高位移至进位位,进位位移至最低位。大循环右移:最低位移至进位位,进位位移至最高位。大循环右移:最低位移至进位位,进位位移至最高位。2.3.1 原码一位乘法1. 人工计算乘法例:求两数乘积 1101 A20 不移位 1101 A21 左移1位 0000 A22 左移2位 1101 A23 左移3位AB= A(0.1011) =0.1A+0.00A+0.001(A+0.1A) = 0.1A+0.010A+0.1(A+0.1A) = 0.1A+0.10A+0.1(A+0.1A) =2-1A+ 2-10A+ 2-1(A+ 2-1A) = 2-1A
42、+ 2-10A+ 2-1(A+ 2-1(A+0) 将乘法变成加法和右移的结合。3原码一位乘法的运算规则设 xxf.xx x n , yyf.yy y n ,乘积为P,乘积的符号位为Pf ,则有 Pf= xfyf ,|P|=|x|.|y| 求|P|的运算规则为:(1)被乘数和乘数均取绝对值参加运算,符号位单独考虑。(2)被乘数取双符号,部分积的长度与被乘数的长度相同,初值为0。(3)从乘数的最低位的yn位开始对乘数进行判断,若若y yn n=1=1,则部分积加上被则部分积加上被乘数乘数|x|,然后右移一位;然后右移一位; 若yn=0,则部分积加上0,然后右移一位。(4)重复(3)判断n次。例例1
43、 x= -0.1101x= -0.1101,y=-0.1011y=-0.1011,求:求: xyxy原原= =? 解: |x|=00.1101 (用双符号表示) |y|= 0.1011 (用单符号表示) 部分积 乘数 yn 说 明1 + 00.1101 yn=1,加|x| 00.1101 1 右移一位得 P1 + 00.1101 yn=1 ,加|x|0 右移一位得 P2 + 00.0000 yn=0,加0 00.0100111 0.1 右移一位得 P3 + 00.1101 yn=1,加 |x| 00.10001111 0 右移一位得 P4由于 Pf= xfyf =11=0,|P|=|x|.|y
44、| =0.10001111 所以 xy原T部分积R0 R1乘积yyn计数器I移位信号SR2&被乘数xyn=1Pfxfyf&F QR S结束 启动+12.3.2 补码一位乘法1.补码一位乘法的运算规则补码一位乘法的运算规则(1)符号位参与运算,运算的数均以补码表示。符号位参与运算,运算的数均以补码表示。(2)被被乘乘数数一一般般取取双双符符号号位位参参加加运运算算,部部分分积积初初值为值为0 0。(3)乘乘数数可可取取单单符符号号位位,以以决决定定最最后后一一步步是是否否需需要校正,即是否要加要校正,即是否要加-xx补补。(4)乘数末位增设附加位)乘数末位增设附加位y n+1 n+1,且初值为且
45、初值为0。(5)按表)按表2.2所示进行操作。所示进行操作。(6)按按照照上上述述算算法法进进行行n+1步步操操作作,但但第第n+1步步不不再再移移位位,仅仅根根据据y0与与y1的的比比较较结结果果作作相相应应的的运运算即可。算即可。 表表2 22 2 补码一位乘法算法补码一位乘法算法 yn(高位)yn+1(低位) 操 作 1 0 1 0 部分积右移一位部分积右移一位 1 1 1 1 部分积部分积加加 x x补补,右移一位右移一位 1 0 1 0 部分积部分积加加-xx补补,右移一位右移一位 1 1 1 1 部分积右移一位部分积右移一位 例2 x= -0.1101,y=0.1011,求:xy补
46、=? 解: x补=11.0011,-x补=00.1101 (用双符号表示) y补=0.1011 (用单符号表示) 部分积 乘数ynyn+1 说 明10 + 00.1101 ynyn+1=10,加-x补11 右移一位得 P101 ynyn+1=11,右移一位得 P2 + 11.0011 ynyn+1=01,加x补 11.1011001 0.10 右移一位得 P3 + 00.1101 ynyn+1=10 加-x补 00.01000001 0.1 右移一位得 P4 + 11.0011 ynyn+1=01, 加x补 11.01110001 最后一步不移位 即xy补ynyn+1T部分积R0 R1乘积yy
47、n计数器I移位信号 S CI被乘数x&F QR S+1多路开关R2&10ynyn+1&+1yn+101反原结束启动2.3.3 原码两位乘法为了提高乘法的执行速度,可以考虑每次对乘数的两位进行判断以确定相应的操作,这就是两位乘法。原码两位乘法的运算规则为: (1)符号位不参加运算,最后的符号Pf= xfyf 。 (2)部分积与被乘数均采用三位符号,乘数末位增加一位C,其初值为0。 (3)按表2.3所示的操作。(4)若尾数n为偶数,则乘数用双符号,最后一步不移位。 若尾数n为奇数,则乘数用单符号,最后一步移一位。表23 原码两位乘法算法 Yn-1 yn C 操 作 0 0 0 加0 , 右移两位
48、, 0C 0 0 1 加x , 右移两位 , 0C 0 1 0 加x , 右移两位 , 0C 0 1 1 加2x , 右移两位 , 0C 1 0 0 加2x , 右移两位 , 0C 1 0 1 减x , 右移两位 , 1C 1 1 0 减x , 右移两位 , 1C 1 1 1 加0 , 右移两位 , 1C 例4 x= -0.1101,y=0.0110,求xy原=? 解: |x|=000.1101 2|x|=001.1010 (用三符号表示) |y|=00.0110 (用双符号表示) 部分积 乘数 C 说 明100 + 001.1010 yn-1ynC=100,加2|x| 000.011010
49、00.011 右移两位 0C + 001.1010 yn-1ynC=011,加2|x| 000.10000010 右移两位 0C yn-1ynC=000,最后一步不移位 故xy原2.4 定点除法运算2.4.1 原码一位除法两两个个用用原原码码表表示示的的数数相相除除时时,商商的的符符号号通通过过两两个个数数的的符符号号异异或或求求得得,而而商商的的数数值值部部分分通通过过两两个个数数的的数数值值部分按正数求商得到。部分按正数求商得到。设被除数x原xf.xx x n , 除数y 原yf.yy y n ,则商的符号: Qf= xfyf商的数值: |Q|=|x|/|y| 求|Q|的加减交替法(不恢复
50、余数法)运算规则为: (1)符号位不参加运算,并要求|x|y| (2)先用被除数减去除数, 当余数为正时,商上1,余数左移一位,再减去除数。 当余数为负时,商上0,余数左移一位,再加上除数。(3)当第n+1步余数为负时需加上|y|得到第n+1步正确的余数,最后余数为rn2-n(余数与被除数同号)。原码不恢复余数法算法流程图如图原码不恢复余数法算法流程图如图28所示。所示。例1 x= -0.1001,y=-0.1011,求x/y原=? 解: |x|=00.1001,|y|=00.1011 -|y|补= 11.0101 被除数x/余数r 商数q 说 明 001001 +-|y|补 11. 0101
51、 减去除数 111110 0 余数为负,商上0 111100 0 r和q左移一位 +|y|补 00. 1011 加上除数 000111 0.1 余数为正,商上1 001110 0.1 r和q左移一位 +-|y|补 11. 0101 减去除数 000011 0.11 余数为正,商上1 000110 0.11 r和q左移一位 +-|y|补 11. 0101 减去除数 111011 0.110 余数为负,商上0 110110 0.110 r和q左移一位 +|y|补 00. 1011 加上除数 000001 0.1101 余数为正,商上1 Qf= xf + yf=1 + 1=0,x/y原=0.1101
52、, 余数r原=1.00012-4(余数与被除数同号)。原码不恢复余数法的硬件逻辑框图 其中寄存器R0在除法开始前存放被除数,运算过程中存放余数。每次获得的商是在余数加上或减去除数后由加法器的状态来定的。 商存放在R1中,R0与R1都具有左移功能,上商位固定在q n位进行。 在运算过程中,经n+1步获得n+1位商,其中n为有效位数,首先获得的一位商一般为0,最后由xfyf的值来填充以决定商的符号,在逻辑上商的符号由“异或”门实现。 q n的状态用来控制是进行加y还是减y,当q n =1时,除数求补,以-y补的形式送入加法器,进行减y运算;当q n =0时,除数以y的形式送入加法器,进行加y运算。
53、2.4.2 补码一位除法 1. 补码不恢复余数法的算法规则如下: 符号位参加运算,除数与被除数均用双符号补码表示。 被除数与除数同号时,被除数减去除数。被除数与除数异号时,被除数加上除数。商符号位的取值见第步。 余数与除数同号时,商上1,余数左移一位减去除数;余数与除数异号时,商上0,余数左移一位加上除数。 注意:余数左移加上或减去除数后就得到了新余数。 采用校正法包括符号位在内,应重复规则(n1)次。商的校正原则: 当刚好能除尽 (即运算过程中任一步余数为0) 时,如果除数为正,则商不必校正;若除数为负,则商需要校正,即加2-n进行修正。 当不能除尽时,如果商为正,则不必校正;若商为负, 则
54、商需要加2-n进行修正。 求得n位商后,得到的余数往往是不正确的。 正确的余数常需要根据具体情况作适当的处理才能获得,处理方法一般如下: 余数的处理 若商为正,则当余数与被除数异号时,应将余数加上除数进行修正才能获得正确的余数。 若商为负,则当余数与被除数异号时,余数需要减去除数进行校正。 余数之所以需校正,是因为在补码不恢复余数除法运算过程中先比较后上商的缘故。可见,如果要保存余数必须根据具体情况对余数作相应处理,否则余数不一定正确。 例3 x= 0.1001,y= -0.1001,求x/y补=? 解:x补=0.1001,y补=11.0111 ,-y补= 00.1001 (用双符号表示) 被
55、除数x/余数r 商数q 说 明 001001 +y补 11. 0111 x和y异号,x补+ y补 000000 0 余数与 y异号,商上0 000000 0 r和q左移一位 +y补 11. 0111 加上除数 110111 0.1 余数与 y同号,商上1 101110 0.1 r和q左移一位 +-y补 00. 1001 减去除数 110111 0.11 余数与 y同号,商上1 101110 0.11 r和q左移一位 +-y补 00. 1001 减去除数 110111 0.111 余数与 y同号,商上1 101110 0.111 r和q左移一位 +-y补 00. 1001 减去除数 110111
56、 01111 余数与 y同号,商上1 中间有一步余数为零表示能除尽,除数为负,需校正, x/y补= 11111+ 00001= 10000 余数与被除数异号,需校正, 余数r补=(110111+ 00. 1001)2-4 =0. 00002-4。 例3 x= -0.1001,y= 0.1011,求x/y补=? 解:x补=11.0111 y补=00.1011 ,-y补= 11.0101 (用双符号表示) 被除数x/余数r 商数q 说 明 110111 +y补 00. 1011 x和y异号,x补+y补 000010 1 余数与 y同号,商上1 000100 1 r和q左移一位 +-y补 11. 0
57、101 减去除数 111001 1.0 余数与 y异号,商上0 110010 1.0 r和q左移一位 +y补 00. 1011 加上除数 111101 1.00 余数与 y异号,商上0 111010 1.00 r和q左移一位 +y补 00. 1011 加上除数 000101 1.001 余数与 y同号,商上1 001010 1.001 r和q左移一位 +-y补 11. 0101 减去除数 111111 1.0010 余数与 y异号,商上0不能除尽,商为负,需校正, x/y补= 10010+ 00001= 10011 余数与被除数同号不需校正, 余数r补=111112-4(余数与被除数同号)。2
58、.5 定点运算器的组成与结构 ALU(Arithmetic Logic Unit) 运算器是对数据进行加工处理的部件,它的具体任务是实现数据的算术运算和逻辑运算,所以它又 称 为 算 术 逻 辑 运 算 部 件 , 简 记 为ALU(Arithmetic Logic Unit)。2.5.1 多功能算术逻辑运算单元(ALU)(1)一位全加器)一位全加器设设x x和和y y两个操作数分别为两个操作数分别为 x xx xf f.x.xx xx x n n , y yy yf f.y.yy yY Yn n表25 一位全加器真值表Xi yi Ci-1 Si Ci 0 0 0 0 0 0 0 1 1 0
59、0 1 0 1 0 0 1 1 0 1 1 0 0 1 01 0 1 0 1 0 10 1 1 1 0 0 10 1 1 1 1 1 1 根据以上真值表可分别写出Si和Ci的如下表达式:Si= xi yi Ci-1+ xi yi Ci-1+ xi yi Ci-1+ xi yi Ci-1= xi + yi + Ci-1 Ci= xi yi Ci-1+ xi yi Ci-1+ xi yi Ci-1+ xi yi Ci-1 = xiyi + (xi + yi) Ci-1 以上两式用“异或”门构成一位全加器, 并行加法器使用的全加器的位数与操作数的位数相同,它能够同时对操作数的各位进行相加,所以,称为
60、并行加法器。这里将进位信号的产生与传递的逻辑结构称为进位链。 (1)串行进位的并行加法器 当操作数为n1位长时,需要用n1位全加器构成加法器, 如图2.13所示。 真正的结果依赖于进位信号的逐位产生。加法器求和的时间是进位信号的产生和传递所占用的时间。 人们把xiyi称为进位传递函数或进位传递条件,并以Pi表示。而将xiyi称为进位产生函数或本地进位,并以Gi表示。所以,进位表达式又常表示为 Ci= xiyi + (xiyi) Ci-1 = Gi + Pi Ci-1 串行进位链的表达式为: C1= x1y1 + (x1y1) C0 = G1 + P1 C0 C2= x2y2 + (x2y2)
61、C1 = G2 + P2 C1 C3= x3y3 + (x3y3) C2 = G3 + P3 C2 Cn-1= xn-1y n-1 + (x n-1y n-1) C n-2 = G n-1 + P n-1 C n-2 Cn= xny n + (x ny n) C n-1 = G n + P n C n-1 从这组表达式中可以明显地看到,某位的进位信号的产生,依赖于低位进位信号的产生。要提高加法器的运算速度,就必须解决进位信号的产生和传递问题。 (2)并行进位的并行加法器 上式可以改写成如下形式: C1= G1 + P1 C0 C2= G2 + P2 C1= G2 + P2(G1 + P1C0)
62、 = G2 + P2G1 + P2P1C0 C3= G3 + P3 C2= G3 + P3(G2 + P2C1) = G3 + P3G2 + P3P2G1 + P3P2P1C0 以此类推, C4= G4 + P4 C3= G4 + P4G3 + P4P3G2 + P4P3P2G1 + P4P3P2P1C0 Cn-1= G n-1 + P n-1G n-2 + P n-1P n-2G n-3 + P n-1P n-2P n-3P4P3P2G1 + P n-1P n-2P n-3P4P3P2P1C0 Cn= G n + P nG n-1 + P nP n-1G n-2+ + P nP n-1P n
63、-2P4P3P2G1 + P nP n-1P n-2P4P3P2P1C0 各进位信号的产生不再与低位的进位信号有关,而只与两个参加运算的数和C0有关。 组内并行、组间串行的进位链 这种进位链也称为单重分组跳跃进位。以16b加法器为例,一般可分作4 个小组,每小级4位,每组内部采用并行进位结构,组间采用串行进位传递结构。 这里以最低4b(第4b第1b)这一小组为例进行讨论。它们各位的进位表达式为 C1= G1 + P1 C0 C2= G2 + P2G1 + P2P1C0 C3= G3 + P3G2 + P3P2G1 + P3P2P1C0 C4= G4 + P4G3 + P4P3G2 + P4P3
64、P2G1 + P4P3P2P1C0在这个小组里,来自低位的进位信号只有C0 ,由它送到高位小组的进位信号只需送出C4即可。从这组表达式可得,这个小组组内的并行进位14)。线路(见图2. 图中用虚线围起来的部分可看成是一个逻辑网络,如图2.15所示。 组内并行、组间并行的进位链 这种进位链又称为多重分组跳跃进位链。仿照分析每一位进位信号的方法,将每个小组最高位的进位信号分成进位传送函数和进位生成函数两个部分: C4= G4 + P4G3 + P4P3G2 + P4P3P2G1 + P4P3P2P1C0 其中P4P3P2P1为小组的传送函数,记作Pi*。而前面4项与C0无关, 只与本小组内的Gi、
65、Pi有关,所以称它们为第一小组的进位生成函数,记作Gi*,即 G1*= G4 + P4G3 + P4P3G2 + P4P3P2G1 P1*= P4P3P2P1 因此 C4= G1*+ P1* C0 同理 C8= G2*+ P2* C4 C12= G3*+ P3* C8 C16= G4*+ P4* C12 这是一组递推表达式,可将其展开为 C4= G1*+ P1*C0 C8= G2*+ P2*G1*+ P2*P1*C0 C12= G3*+ P3* G2*+ P3*P2*G1*+ P3*P2*P1*C0 C16= G4*+ P4* G3*+ P4*P3* G2*+ P4*P3*P2*G1*+ P4
66、*P3*P2*P1*C0 用逻辑电路实现展开后的表达式,就可以构成组间并行的进位线路,即第二重分组并行进位线路。 组内采用并行进位,组间也采用并行进位时,每个小组应产生本小组的进位生成函数Gi*和本小组的进位传递函数Pi*,以作为组间并行进位网络的输入变量,所以,小组内的并行进位线路应作适当的修改,即: 第一小组应产生G1*、 P1*、C1、C2、C3,而不在小组内产生C4。 第二小组应产生G2*、 P2*、C5、C6、C7,而不在小组内产生C8。 第三小组应产生G3*、 P3*、C9、C10、C11,而不在小组内产生C12。 第四小组应产生G4*、 P4*、C13、C14、C15,而不在小组
67、内产生C16 各小组的进位生成函数和进位传递函数的逻辑表达式为 G1*= G4 + P4G3 + P4P3G2 + P4P3P2G1 G2*= G8 + P8G7 + P8P7G6 + P8P7PG5 G3*= G12 + P12G11 + P12P11G10 + P12P11P10G9 G4*= G16 + P16G15 + P16P15G14 + P16P15P14G13 P1*= P4P3P2P1 P2*= P8P7PP5 P3*= P12P11P10P9 P4*= P16P15P14P13 作如上修改后,仍以第一小组为例,组内的逻辑电路如图2.17所示。ALU的原理 常见的产品有SN7
68、4181,它是4b片形的芯片,即一片能完成4 b数的算术运算和逻辑运算。还有8b、16b片的ALU芯片。下面先介绍SN74181芯片, 然后讨论如何用它构成ALU。 (1)SN74181芯片 SN74181是一种具有并行进位的多功能ALU芯片,每片4b,构成一组,组内是并行进位,其芯片方框图如图2.19所示。(2)利用SN74181芯片构成16b ALU的原理 SN74181的结构很适合于将它们连成不同位数的ALU,每片SN74181芯片作为一个4b的小组,由于芯片给出了Cn+4、Pi*和Gi*,所以用该芯片既可构成组间串行进位的ALU,也可以构成组间并行的ALU。 组间串行进位的16b AL
69、U的构成 组间并行进位的16b ALU的构成 需增加一片SN74182芯片。 SN74182与SN74181 配套的产品,是一个产生并行进位信号的部件。由于SN74181 提供了小组的进位传递函数Pi*和进位生成函数Gi*,SN74182可以利用它们作输入参数,以并行的方式给出每个小组(芯片)的最高位进位信号。SN74182在这里的用途是作为第2级并行进位系统。SN74182的逻辑框图如图2.21所示。 例:用SN74181和SN74182设计如下的32b ALU。 行波进位方式, 两重进位方式, 三重进位方式。 解:行波进位方式的32b ALU如图2.23所示。 两重进位方式的32b ALU
70、如图2.24所示。 三重进位方式的32b ALU如图2.25所示。2.5.2 定点运算器1 1.定点运算器的基本结构定点运算器的基本结构 各种计算机中的运算器的结构虽然有区别,但它都必须包含如下几个基本部分:加法器、通用寄存器、输入数据选择电路和输出数据控制电路等。 运算器的基本结构如图2.26所示。 其工作过程为:加法器输入选择电路将选择的总线(BUS)或寄存器组中的数据送往加法器进行运算处理, 再将加法器的运算结果送入输出数据控制电路处理,处理结果根据要求或送往BUS 或送往寄存器暂存。运算器组成实例 (1)小型计算机的运算器 图2.27所示的是国产某小型机的运算器逻辑方框图,它是一个可以
71、实现加、减、乘、除四则运算的并行定点运算器,其所执行的基本算术/逻辑运算有:、求补、求反、传送、增1、加反,并可完成左移、右移、 B交换与结果判零等。(2)位片式运算器1.b双极型位片式运算器AM2901的逻辑结构示意图,它将ALU、通用寄存器组、多路开关、移位器等逻辑构件集成在一个芯片内。2.例如采用四片AM2901连接,可构成16b字长的定点运算器,如图2.29所示。2.6 浮点运算方法和浮点运算器2.6.1 浮点算术运算浮点加法和减法浮点加法和减法设有两个浮点数设有两个浮点数x x和和y y,它们分别为它们分别为 x2mMx y2nMy 其中m和n分别为数x和y的阶码,Mx和My为数x和
72、y的尾数。完成浮点加法或减法运算,需要进行对阶、求和、规格化、舍入、判溢出等工作。 ()对阶 要对阶,首先应求出两数的阶码m和n之差,即 Emn 若0,则表示两数的阶码相等,即m=n;若0,则表示mn;若0,则表示mn。 当mn时,要通过尾数的移位以改变m或n,使之相等,在对阶时,总是使小阶向大阶看齐。 若mn,则将操作数y的尾数右移一位,y的阶码n加1,直到mn为止。 若mn,则将操作数x的尾数右移一位,x的阶码m加1,直到mn为止。 (2)尾数相加 使两个数的阶码相等后,就完成了小数点对准的工作,这时可以执行尾数相加操作。尾数相加与定点数的加、减法相同。 (3)结果规格化 结果规格化就是使
73、运算结果成为规格化数。为了运算处理方便,可让尾数的符号位扩展为两位,当 运 算 结 果 的 尾 数 部 分 不 是 11.0或00.1的形式时,就可进行规格化处理。根据运算结果的不同,可能需要左规( 尾数左移成规格化数),也可能需要右规(尾数右移成规格化数)。 当尾数符号位01或10时,需要右规。右规的方法是尾数连同符号位右移一位,和的阶码加1,右规处理后就可得到11.0或00.1的形式,然后就可进行规格化的处理。 当运算结果的符号位和最高有效位为11.1或00.0时,需要左规。 左规的方法是尾数连同符号位一起左移一位,和的阶码减1, 直到尾数部分出现11.0或00.1的形式为止。 (4)溢出
74、判断 运算结果的尾数部分符号位为01或10时,在定点加减法运算中表示溢出,而在浮点运算中并不表示溢出。在浮点数中,阶码的位数决定了数的表示范围,因此,浮点运算是在阶码的符号位出现01或10时,表示溢出,而尾数的符号位为01或10时,给出的是运算结果需要右规的信号。例:设浮点数的阶码为4b(含阶符),尾数为6b(含尾数),x、y中的指数项,小数项均为二进制真值。 x=2010.1101,y=211(-0.1010),求x+y=? x=-2-0100.1111,y=2-1000.1110,求x-y=?解 x补=0001,0.11010,y补对阶 E= m 补- n 补=0001+1101=1110
75、,其真值为-010,即:x的阶码比y的阶码小2,x的尾数应右移2位,阶码加2,得 xx补补=0011=0011,0.00111 0.00111 (0 0舍舍1 1入)入)尾数相加(用双符号),尾数相加(用双符号), x x尾尾 补补+y y尾尾 补补,即,即 结果规格化,由于运算结果的尾数为 11.1的形式,所以应左规,尾数左移一位,阶码减1,结果为 x+y补=0010,1.00110,x+y=2010(-0.11010)解 x补=1110, 1.00010, y补=1100,0.11100, -y补对阶 E= m 补- n 补=1110+0100=0010,其真值为0010,即x的阶码比y的
76、阶码大2,-y的尾数应右移2位,阶码加2,得 -y补=1110,1.11001 (0舍1入)尾数相减(用双符号),尾数相减(用双符号), x x尾尾 补补+-+-y y尾尾 补补,即,即 结果规格化,由于运算结果的尾数为 10.的形式,所以应右规,尾数右移一位,阶码加1,结果为 x-y补=1111,1.01110 (0舍1入),x-y=2-001(-0.10010)浮点乘法运算 设 x2mMx , y2nMy ,则 xy2m+n(MxMy) 其中,Mx、My分别为x和y的尾数。 浮点乘法运算也可以分为如下三个步骤: (1)阶码相加 两个数的阶码相加可在加法器中完成。阶码和尾数两个部分并行操作时
77、,可另设一个加法器专门实现对阶码的求和;串行操作时,可用同一加法器分时完成阶码求和、尾数求积的运算,并且先完成阶码求和运算。阶码相加后有可能产生溢出,若发生溢出,则相应部件将给出溢出信号,指示计算机作溢出处理。 (2)尾数相乘 两个运算数的尾数部分相乘就可得到积的尾数。尾数相乘可按定点乘法运算的方法进行运算。 (3)结果规格化 当运算结果需要规格化时,就应进行规格化操作。规格化及舍入方法与浮点加减法处理的方法相同。 浮点除法运算设 x2mMx , y2nMy ,则 xy2mn(MxMy)浮点除法运算也可以分如下三步进行(1 1)检查被除数的尾数)检查被除数的尾数 检查被除数的尾数是否小于除数的
78、尾数(从绝对值考虑)。如果被除数的尾数大于除数的尾数,则将被除数的尾数右移一位并相应地调整阶码。由于操作数在运算前是规格化的数,所以,最多只作一次调整。这步操作可防止商的尾数出现混乱。 (2) 阶码求差 由于商的阶码等于被除数的阶码减去除数阶码,所以,要进行阶码求差运算。阶码求差可以很简单地在阶码加法器中实现。 (3) 尾数相除 商的尾数由被除数的尾数除以除数尾数获得。由于操作数在运算前已规格化并且调整了尾数,所以尾数相除的结果是规格化定点小数。两个尾数相除与定点除法相类似,这里不再讨论。2.6.2 浮点运算器 计算机中的浮点运算器总是由处理阶码和处理尾数的两部分组成。微机系统中的浮点运算器目
79、前有两种形式:浮点协处理器和微处理器芯片内集成浮点部件。如8086、80286和80386微机系统可选用相应的浮点协处理器,80486以上的微机系统则将浮点部件FPU集成到微处理器芯片之中。、浮点运算器的一般结构 浮点运算可用两个松散连接的定点运算部件来实现,这两个定点运算部件就是图2.30中所示的阶码部件和尾数部件。2.浮点运算器实例 以80387浮点协处理器为例,说明其特点和内部结构。 (1)80387内部结构 80387浮点协处理器内有三个主要功能部件:总线控制逻辑部件、数据接口控制部件和浮点运算部件,其内部结构如图2.31所示。 总线控制逻辑 总线控制逻辑与CPU使用I/O总线周期单独
80、通信时,总线控制逻辑以CPU 的一个特殊外部设备出现。当它碰到ESC指令时,CPU自动启动I/O总线周期,使用保留的I/O地址与总线控制逻辑通信。总线控制逻辑不能直接与存储器通信。由CPU 完成所有的存储器访问,即存储器到80387,以及由80387到存储器之间的传输。 数据接口和控制单元 数据接口和控制单元中的指令译码器对由CPU送来的ESC指令进行译码,并直接对浮点输入输出的数据流产生控制信号。它还负责微指令的时序控制,浮点运算单元及其他部件的操作控制。还要产生总线同步信号BUSY#、PEREQ和ERROR#信号。在所有操作中它支持FPU,但不能单独执行操作。 浮点运算单元 浮点运算单元可
81、执行有关寄存器堆栈的所有指令,这些指令有算术指令、逻辑指令、超越指令、常数指令和数据传送指令等。部件中的数据通道为84b,其中有68个有效位、15个阶运算位和1个符号位。以很高的速度完成内部数据传送。 浮点运算单元内有处理浮点数指数的部件和处理尾数的部件, 有加速移位操作的移位器线路,它们通过指数总线和小数总线与八个80字长的寄存器堆栈相连接。这些寄存器可按堆栈方式工作,此时,栈顶被用作累加器,也可以按寄存器相对栈顶的编号直接访问任一个寄存器。八个寄存器的编号用07表示,处在栈顶的那个寄存器的编号由状态字段TOP给出。在浮点指令中,用ST表示栈顶寄存器,并且可以用ST(i)来访问其他七个寄存器,此时i值可以作为17中的一个值。i是相对于栈顶的一个偏移量,而不一定真正是八个寄存器的实际编号。仅当栈顶为0号寄存器时,寄存器1寄存器7正好用ST(1)ST(7)表示,而当7号寄存器为栈顶时,则ST(1)ST(7)分别表示寄存器0寄存器6。(2)浮点数据类型 浮点部件可以处理以存储器为基础的三大类数值数据,分别为二进制整数、压缩的十进制整数和二进制实数。三类数据又可进一步分成七种数据类型。