1、第三篇 中央处理器(CPU)第第 6 6 章章 计算机的运算方法计算机的运算方法*一、数据的编码与表示一、数据的编码与表示*二、定点数的算术运算二、定点数的算术运算*三、浮点四则运算三、浮点四则运算*四、逻辑运算四、逻辑运算数据表示数据表示运算方法运算方法 一、数据的编码与表示一、数据的编码与表示数据数据逻辑数据逻辑数据检错纠错码检错纠错码字符字符字符串字符串汉字汉字数值数值文字、符号文字、符号语音语音图形图形图像图像各种进制各种进制BCD码码定点定点浮点浮点逻辑型数据逻辑型数据逻辑型数据只有两个值:逻辑型数据只有两个值:真和假真和假,正好可以用二进,正好可以用二进制码的两个符号分别表示,制码
2、的两个符号分别表示,例如例如 1 表示表示 真真 则则 0 表示表示 假假不必使用另外的编码规则。不必使用另外的编码规则。对逻辑型数据可以执行逻辑的对逻辑型数据可以执行逻辑的 与、或、非与、或、非等基本逻等基本逻辑运算。辑运算。字符型数据的表示字符型数据的表示 字符作为人字符作为人机联系的媒介,指字母、数字、机联系的媒介,指字母、数字、运算符等西文字信息。当前的西文字符集由运算符等西文字信息。当前的西文字符集由 128 个符号组成,通常用个符号组成,通常用 8 位二进制编码,即位二进制编码,即用一个用一个字节来表示每一个符号字节来表示每一个符号,当前较多通用的标准字,当前较多通用的标准字符集是
3、符集是ASCII 码码,ASCII码字符集具体编码如下表码字符集具体编码如下表所示:所示: ASCII字符编码集字符编码集 b6 b5 b4 000 001 010 011 100 101 110 111 b3 b2 b1 b0 0000 NUL DLE SP 0 P , p 0001 SOH DC1 ! 1 A Q a q 0010 STX DC2 “ 2 B R b r 0011 ETX DC3 # 3 C S c s 0100 EOT DC4 $ 4 D T d t 0101 ENQ NAK % 5 E U e u 0110 ACK SYN & 6 F V f v 0111 BEL ET
4、B 7 G W g w 1000 BS CAN ( 8 H X h x 1001 HT EM ) 9 I Y i y 1010 LF SUB * : J Z j z 1011 VT ESC + ; K k 1100 FF FS , N n 1111 SI US / ? O _ o DELASCII码码的机内表示的机内表示 采用一个字节表示采用一个字节表示ASCII码时,最高位的处码时,最高位的处理方法:理方法:(1 1)最高位)最高位不用不用,即恒为,即恒为“0”0”;(2 2)最高位用于)最高位用于奇偶校验位奇偶校验位;(3 3)若采用扩展)若采用扩展ASCIIASCII码方案时,最高位也用
5、来码方案时,最高位也用来表示表示字符编码字符编码,此时,可表示,此时,可表示256256种符号。种符号。字符串的存放:字符串的存放: 字符串是指字符串是指连续连续的一串字符,它们占据主存的一串字符,它们占据主存中中连续连续的多个字节,每个字节存放一个字符,对的多个字节,每个字节存放一个字符,对一个主存字的多个字节,有一个主存字的多个字节,有按从低位到高位按从低位到高位字节字节次序存放的,也有按次序存放的,也有按从高位到低位从高位到低位字节次序存放字节次序存放的。例如:的。例如:IF AB THEN READ(C)就可以有如就可以有如下不同的存放方式:下不同的存放方式:字符串的表示与存储字符串的
6、表示与存储 I F A A F I B T T B 假定每个字假定每个字 H E N N E H 由由 4 个字节个字节 R E A D D A E R 组成组成 ( C ) ) C (汉字的表示汉字的表示 在计算机中表示汉字通常涉及以下几种汉字编码:在计算机中表示汉字通常涉及以下几种汉字编码: (1)汉字输入码)汉字输入码 为直接使用西文标准键盘把汉字为直接使用西文标准键盘把汉字输入输入到计算到计算机而设计。机而设计。 (2)汉字机内码)汉字机内码 汉字信息在计算机内部存储、处理和传送所采汉字信息在计算机内部存储、处理和传送所采用的编码。通常采用国标码。用的编码。通常采用国标码。(3)汉字字
7、模码)汉字字模码 用于输出设备用于输出设备输出输出汉字而设计的字形编码汉字而设计的字形编码。 汉字的机内表示汉字的机内表示 通常用通常用两个字节两个字节表示一个汉字。表示一个汉字。汉字内码的识别方法:汉字内码的识别方法: (1 1)若将若将ASCIIASCII码字节的高位设为码字节的高位设为“0”0”,则汉字两,则汉字两 个字节的高位个字节的高位均为均为“1”1”; (2 2)若若ASCIIASCII码字节最高位用于奇偶校验码或扩充码,码字节最高位用于奇偶校验码或扩充码,则需要三个字节表示汉字,第一个字节作为汉字的则需要三个字节表示汉字,第一个字节作为汉字的标标识符识符。 几种常用的数制及其转
8、换几种常用的数制及其转换N进制数可用进制数可用表示;表示;温故而知新:二进制、十进制、八进制、十六进温故而知新:二进制、十进制、八进制、十六进制的表示方法及其相互转换。制的表示方法及其相互转换。 二二十进制编码(十进制编码(BCD编码)编码) BCD编码,编码,用用四位四位二进制表示一位十进制,有多二进制表示一位十进制,有多种方案,种方案,例如:例如: 84218421码,码,54215421码,码,24212421码,余码,余3 3码,格雷码。码,格雷码。又可区分为:又可区分为: 有权码:有权码:四个二进制位均有指定的位权。四个二进制位均有指定的位权。 无权码:无权码:二进制编码各位无指定的
9、位权。二进制编码各位无指定的位权。 有权码有权码 无权码无权码 0 0000 0000 0011 0000 1 0001 0001 0100 00012 0010 0010 0101 00113 0011 0011 0110 00104 0100 0100 0111 01105 0101 1011 1000 01116 0110 1100 1001 01017 0111 1101 1010 01008 1000 1110 1011 11009 1001 1111 1100 11018421余余3码码2421格雷码格雷码+ 0. 0 0 0 0 0 0 11 0 0 0 1 0 0. 11 0
10、0 0 1 0 0. 1 0 0 0 0 0 1+?思考:小数点位置不同,运算如何实现?思考:小数点位置不同,运算如何实现?手工运算:手工运算:.符号位符号位10.定点数运算中小数点的位置无关,小数点无需存放定点数运算中小数点的位置无关,小数点无需存放数值型数值型数据的机内表示形式数据的机内表示形式 隐藏隐藏定点小数定点小数: N = Nf . N1 N2 Nn定点整数定点整数: N = Nf N1 N2 Nn. 浮点数浮点数: N = jf j1 j2 . Jm ; Sf . S1 S2 . Sn 隐藏隐藏 隐藏隐藏定点小数定点小数表示表示: Xf X-1 X-2 X -n 特点:特点:原码
11、原码为符号位加数的为符号位加数的绝对值绝对值,0正正1负负 原码零原码零有两个编码,有两个编码,+0和和 -0编码不同编码不同 X 1 X=1+|X| -1 X 00 X 1定义: X原 =原码原码的定的定义义 实例:X1 = 0.10110 -0.10110 0.0000 X1原 = 0.10110 1.10110 0.0000 1.0000 n定义: X原 =定点整数定点整数表示表示: Xf Xn Xn-1 X 1 0,X 2n-X=2n+|X|0 X 2n-2n X 0 2n=1 0 0 0 实例:X1 = 10110 -10110 0 X1原 = 010110 110110 0,000
12、0 1,0000定点小数定点小数反码的定义特点:负数特点:负数反码反码为符号位跟数每位的反,为符号位跟数每位的反,0正正1负负 反码反码零有两个编码,零有两个编码,+0 和和 - -0 的编码不同的编码不同 X (2-2-n)+X -1 X 0 0 X 1定义:X反 = 实例:X1 = 0.10110 -0.10110 0.0000 X1反 = 0.10110 1.01001 0.0000 1.1111 n+1定义: X反 =定点整数的定点整数的反码反码表示表示 0,X 2n+1-1+X0 X 2n-2n X 0 2n+1=1 0 0 0定点小数表示定点小数表示: Xf X-1 X-2 X -
13、n特点:特点: 补码补码最高一位为符号位,最高一位为符号位,0正正1负负 补码表示补码表示为模加上负数本身为模加上负数本身 补码补码零有唯一编码,故补码还可以表示零有唯一编码,故补码还可以表示 -1 补码补码能很好用于加减(乘除)运算能很好用于加减(乘除)运算补码补码的引入;钟表;负数的正补数。的引入;钟表;负数的正补数。实例:X1 = 0.10110 -0.10110 0.0000 -0.0000 -1.0000 X1补 = 0.10110 1.01010 0.0000 0.0000 1.0000n+1定义: X补 =定点整数表示定点整数表示: Xf Xn Xn-1 X 1 0,X 2n+1
14、+X0 X 2n2n X 0 2n+1=1 0 0 0整数整数的原码、反码和补码表示的原码、反码和补码表示 与定点小数的三种表示基本相同,差别仅表现在与定点小数的三种表示基本相同,差别仅表现在小数点小数点的位置,整数的小数点在最低数值位的右侧。的位置,整数的小数点在最低数值位的右侧。 整数中用整数中用“,”隔开符号位与数值位。隔开符号位与数值位。 例如:五位整数的编码:例如:五位整数的编码: X1 = +01110 X1原原= 0,01110 X1反反= 0,01110 X1补补= 0,01110 X2 = - 01110 X2原原= 1,01110 X2反反= 1,10001 X2补补= 1
15、,10010原、反、补码表示小结原、反、补码表示小结正数的正数的 原码、反码、补码表示原码、反码、补码表示均相同均相同,符号位为,符号位为 0,数值位等,数值位等于数的于数的真值真值。零的原码和反码均有零的原码和反码均有2个个编码,补码只有编码,补码只有1个编码个编码负数的原码、反码、补码表示负数的原码、反码、补码表示均不同均不同, 符号位为符号位为 1,数值位:原码为数的绝对值;,数值位:原码为数的绝对值; 符号位为符号位为 1,数值位:反码为每一位均取反码;,数值位:反码为每一位均取反码; 符号位为符号位为 1,数值位:补码为反码再在最低位,数值位:补码为反码再在最低位+1; n+1n+1
16、位位移码移码:Xf XXf Xn n X Xn-1n-1 X X 1 1 1 无小数表示形式无小数表示形式2定义定义: X移移 = 2n+X -2n X = 1/r,称满足这种表示要求的浮点数为,称满足这种表示要求的浮点数为规格化表示规格化表示。 把不满足这一表示要求的尾数,变成满足这一要把不满足这一表示要求的尾数,变成满足这一要求的尾数的操作过程,叫作浮点数的求的尾数的操作过程,叫作浮点数的规格化处理规格化处理,通,通过过尾数移位和修改阶码尾数移位和修改阶码实现。实现。X = S rjX浮浮 = jf j1 j2 . Jm Sf S1 S2 . Sn规格化的浮点数尾数形式(以二进制数为例):
17、规格化的浮点数尾数形式(以二进制数为例):当尾数用原码表示时,当尾数用原码表示时, S原原 = 0.1xxx 或或1.1xxx当尾数用补码表示时,当尾数用补码表示时, S补补 = 0.1xxx 或或1.0 xxx例例1:判断下列数的尾数表示是否为规格化的表示形判断下列数的尾数表示是否为规格化的表示形式式-0.0111111 X原原=1.0111111-0.0111111 X补补=1.1000001 -0.1000000 X原原=1.1000000 -0.1000001 X补补=1.0111111 浮点数在计算机内的表示浮点数在计算机内的表示IEEE 标准:标准:阶码用移码,基数为阶码用移码,基
18、数为2;尾数用原;尾数用原码码X = S rj X 浮浮 = jf j1 j2 . Jm Sf S1 S2 . Sn定点数与浮点数的定点数与浮点数的比较比较:(1)数位相同时,浮点数比定点数表示范围大得多;数位相同时,浮点数比定点数表示范围大得多;(2)浮点数为规格化数时,精度远比定点数高;浮点数为规格化数时,精度远比定点数高;(3)浮点运算步骤比定点数多,速度比定点数低;浮点运算步骤比定点数多,速度比定点数低;(4)判断溢出的方法不同。判断溢出的方法不同。IEEE 754 IEEE 754 标准浮点数表示格式标准浮点数表示格式 X 浮浮 = Sf jf j1 j2 . Jm S1 S2 .
19、Sn符号位符号位Sf 阶码位阶码位 尾数数码位尾数数码位 总位数总位数 短浮点数短浮点数: 1 8 23 32长浮点数长浮点数: 1 11 52 64 临时浮点数临时浮点数: 1 15 64 80X = S rj 例例2:设浮点数字长设浮点数字长16位,其中阶码位,其中阶码5位(含位(含1位位阶符),尾数阶符),尾数11位(含位(含1位数符),将十进制数位数符),将十进制数+13/128写成二进制定点数和浮点数,并分别写写成二进制定点数和浮点数,并分别写出它在定点机和浮点机中的机器数形式。出它在定点机和浮点机中的机器数形式。例例3:将十进制数将十进制数-54表示成二进制定点数和浮点数,表示成二
20、进制定点数和浮点数,并写出它在定点机和浮点机中的机器数形式。并写出它在定点机和浮点机中的机器数形式。(其它要求同上例)(其它要求同上例)例例4:设浮点数字长设浮点数字长16位,其中阶码位,其中阶码5位(含位(含1位阶位阶符),尾数符),尾数11位(含位(含1位数符),写出位数符),写出-53/512对对应的浮点规格化数的原码、补码、反码和阶码用应的浮点规格化数的原码、补码、反码和阶码用移码,尾数用补码的形式。移码,尾数用补码的形式。 二、定点数的算术运算二、定点数的算术运算(1) 移位移位运算运算 (2) 补码补码 加减法运算加减法运算(3) 原码原码一位乘法运算一位乘法运算 原码原码一位除法
21、运算一位除法运算 补码补码一位乘法运算一位乘法运算 补码补码一位除法运算一位除法运算(4) 补码补码二位乘法运算二位乘法运算(5) 快速快速乘除法运算方法乘除法运算方法移位运算的实现移位运算的实现 移位运算移位运算,用于提高某些运算的速度或作为乘除法运算的,用于提高某些运算的速度或作为乘除法运算的子运算。分为算术移位和逻辑移位。子运算。分为算术移位和逻辑移位。 算术移位算术移位: : 对对有符号数有符号数进行的移位,进行的移位,小数点位置不变小数点位置不变。 规则规则: : (1) (1) 移位后移位后符号位符号位不变;不变; (2) (2) 不同码制机器数移位后空位填补规则,如不同码制机器数
22、移位后空位填补规则,如下表:下表:正数正数码码 制制原码、补码、反码原码、补码、反码原原 码码补补 码码反反 码码右移填补代码右移填补代码001 1负负数数左移填补代码左移填补代码0 0 0 1例例5 5:设机器数字长:设机器数字长8 8位(含一位符号位),位(含一位符号位),若若A=A=6262,写出三种机器数左右移一位和,写出三种机器数左右移一位和两位后的表示形式以及相应的真值,并分两位后的表示形式以及相应的真值,并分析结果的正确性。析结果的正确性。算术左右移规律总结: 对于正数,三种机器数移位后符号位均不变,左移时最高位丢1,结果出错;右移时,最低位丢1,影响精度。 对于负数,三种机器数
23、移位后符号位均不变, 负数原码,左移高位丢1,出错,右移低位丢1,影响精度。 负数补码,左移高位丢0,出错,右移低位丢1,影响精度。负数反码,左移高位丢0,出错,右移低位丢0,影响精度。逻辑移位(无符号数的移位)逻辑移位(无符号数的移位)左移左移1位位右移右移1位位左移左移2位位右移右移2位位无符号数无符号数规律:规律:无符号数的左右移位,空出来的位都补无符号数的左右移位,空出来的位都补0.补码加减法的实现(以定点小数为例)补码加减法的实现(以定点小数为例)基本公式:基本公式:X Y补补 = X补补 Y补补 (mod 2)小数)小数 X Y补补 = X补补 Y补补 (mod 2n+1)整数)整
24、数特点特点:(1)符号位)符号位参与参与运算,结果符号位通过运算自动运算,结果符号位通过运算自动产生;产生;(2)运算实际上为)运算实际上为“模运算模运算”,因此,运算过程,因此,运算过程中可能产生中可能产生模溢出模溢出,丢掉模后,不影响运算结果。,丢掉模后,不影响运算结果。例例6:已知:已知A=0.1011,B=-0.0101.求求A+B补。补。例例7:已知:已知A=-1001,B=-0101.求求A+B补。补。例例8:设机器数字长:设机器数字长8位,其中位,其中1位为符号位,位为符号位,若若A=+15,B=+24,求,求A-B补,并还原成补,并还原成真值。真值。补码加减法的溢出补码加减法的
25、溢出溢出:溢出:运算结果超出数据的表示范围。分为上溢和下运算结果超出数据的表示范围。分为上溢和下溢(或称溢(或称正溢出和负溢出正溢出和负溢出)。)。例如:例如:X = +0.1011 Y = +0.1101 X补补 = 0.1011, Y补补 = 0.1101 X+Y补补 = X补补 + Y补补 = 0.1011 + 0.1101 = 1.0100 正溢出正溢出 溢出的后果是结果的最高数值位溢出的后果是结果的最高数值位侵入侵入符号位,使符号符号位,使符号位遭到破坏。在计算机中,溢出是作为位遭到破坏。在计算机中,溢出是作为出错出错处理的。处理的。补码加减法的溢出判别补码加减法的溢出判别溢出判断:
26、两种方法溢出判断:两种方法(1)一位)一位符号位判断法:对于加法,只有符号位判断法:对于加法,只有正加正(正溢出)正加正(正溢出)或负加负(负溢出)或负加负(负溢出)的情况可能产生溢出,判断原则是:结果的情况可能产生溢出,判断原则是:结果符号位与源操作数相同则不溢出,不相同则溢出,对于减法,符号位与源操作数相同则不溢出,不相同则溢出,对于减法,只有符号不同的俩数相减才可能溢出,若有溢出正减负为正溢只有符号不同的俩数相减才可能溢出,若有溢出正减负为正溢出,负减正为负溢出。出,负减正为负溢出。(2 2)两位)两位符号位判断法:即符号位判断法:即变形补码法变形补码法判别判别,结果的双符号,结果的双符
27、号位的值为位的值为 0101或或1010为溢出。为溢出。0101为正溢出,为正溢出,1010为负溢出,溢出时,为负溢出,溢出时,高位符号是高位符号是结果的正确符号。结果的正确符号。 例例9:设设A=-11/16,B=-7/16,求,求A+B补补,用一位符,用一位符号位判断法判断有无溢出,若有溢出,是什么溢出号位判断法判断有无溢出,若有溢出,是什么溢出类型?类型?例例10:试用:试用变形补码法变形补码法计算计算A+B并判断有无溢出,并判断有无溢出,并指出是什么溢出类型,设并指出是什么溢出类型,设A=+11/16,B=+7/16。例例11:试用:试用变形补码法变形补码法计算计算A+B并判断有无溢出
28、,并判断有无溢出,并指出什么溢出类型,设并指出什么溢出类型,设A=-11/16,B=-7/16。例例12:已知:已知X = +11/16 Y = +3/16 ,用,用双符号位法双符号位法判判断断X+Y补补有无溢出,若溢出,是什么类型的溢出。有无溢出,若溢出,是什么类型的溢出。例例13:已知:已知:X = 0.1011 Y = 0.0101 ,用,用双符号位法双符号位法判断判断X+Y补补有无溢出,若溢出,是什么类型的溢出。有无溢出,若溢出,是什么类型的溢出。 原码一位乘运算原码一位乘运算基本公式:基本公式: 设设 被乘数被乘数 X原原 = xf . x1 x2 x n 乘乘 数数 Y原原 = y
29、f . y1 y2 y n 则则 X Y原原 =( xf yf ). ( |X| |Y| ) 其中,其中, |X X|和和|Y Y|分别是分别是X X和和Y Y的绝对值的绝对值引例:引例: X = 0.1101 Y = - 0.1011 X原原= 0.1101 Y原原 = 1.1011 |X|= 0.1101 |Y| = 0.1011 0. 1 1 0 1 . 累加器初值取零值累加器初值取零值 0. 1 0 1 1 + . 1 1 0 1 1 1 0 1 . 部分积部分积右右移移1位位 , 0 0 0 0 将移出的将移出的1保存起来保存起来 +1 1 0 1 求第一次部分积求第一次部分积 0
30、. 1 0 0 0 1 1 1 1 手工运算过程手工运算过程 原码一位乘运算原码一位乘运算原码一位乘运算原码一位乘运算 |X|= 0.1101 |Y|= 0.1011 0. 1 1 0 1 . 1 0. 1 0 1 1 + . 1 1 0 1 1. 前次部分积加被乘数前次部分积加被乘数 1 1 0 1 . 部分积右移部分积右移 0 0 0 0将移出的一位保存起来将移出的一位保存起来 + 1 1 0 1 求第二次部分积求第二次部分积 0 . 1 0 0 0 1 1 1 1 手工运算过程手工运算过程 (笔算)(笔算) 原码一位乘运算原码一位乘运算 |X| = 0.1101 |Y| = 0.1011
31、 0. 1 1 0 1 . 1 1 0. 1 0 1 1 + . 1 1 0 1 . 前次部分积加前次部分积加 1 1 0 1 .部分积右移部分积右移 0 0 0 0将移出的一位保存起来将移出的一位保存起来 + 1 1 0 1 求第三次部分积求第三次部分积 0 . 1 0 0 0 1 1 1 1 手工运算过程(笔算)手工运算过程(笔算) 原码一位乘运算原码一位乘运算 X* = 0.1101 Y* = 0.1011 0. 1 1 0 1 . 0. 1 0 1 1 + . 1 1 0 1 1.前次部分积加被乘数前次部分积加被乘数 1 1 0 1 .部分积右移部分积右移 0 0 0 0将移出的一位保
32、存起来将移出的一位保存起来 + 1 1 0 1 求第四次部分积求第四次部分积 0 . 1 0 0 0 1 1 1 1 手工运算过程手工运算过程 乘数有乘数有四四位有效数位,所以共完成位有效数位,所以共完成四四次加法次加法和和四四次右移,再用一步完成两数符号次右移,再用一步完成两数符号异或异或求求积的符号积的符号, 结果为结果为 -0.10001111。原码一位乘运算规则原码一位乘运算规则原码一位乘运算规则:原码一位乘运算规则: 1. 1. 乘积的乘积的符号位符号位由两数符号位由两数符号位“异或异或”产生,符产生,符号位不参与运算;号位不参与运算; 2. 2. 部分积可采用一位或两位符号位;部分
33、积可采用一位或两位符号位; 3. 3. 乘积的数值部分由两数绝对值相乘积的数值部分由两数绝对值相乘乘产生,产生,通过通过n n次次“加法加法”和和n n次次“右移右移”操作实现操作实现。(n(n为乘数的有为乘数的有效数字的位数效数字的位数) )原码一位乘运算实例原码一位乘运算实例 部分积部分积 乘数乘数 0. 0 0 0 0 0.1 0 1 1+ 0. 1 1 0 1 0. 1 1 0 1 0. 0 1 1 0 1 0 1 0 1+ 0. 1 1 0 1 1. 0 0 1 1 0. 1 0 0 1 1 1 0 1 0 0. 0 1 0 0 1 1 1 0 1+ 0. 1 1 0 1 1. 0
34、0 0 1 0. 1 0 0 0 1 1 1 1 0 0. 1 1 0 1 0. 1 0 1 1 1 1 0 1 1 1 0 1 0 0 0 0 + 1 1 0 10 . 1 0 0 0 1 1 1 1例例14: X = -0.1101 Y = - 0.1011 手工运算过程手工运算过程计算机内运算的实现方法计算机内运算的实现方法则则 X* = 0.1101 Y* = 0.1011 X原原 = 1.1101 Y原原 = 1.1011 X Y原原 = 0.10001111例例15:已知:已知 X = -0.1110 Y = - 0.1101,用原码一,用原码一位乘实现位乘实现 X*Y原原。原码两
35、位乘(选讲)原码两位乘(选讲)两位乘数的值可以有四种可能组合,每种组合对应的操作:00 相当于0*X,部分积右移2位,不进行其它运算;01 相当于1*X,部分积加1X后右移2位;10 相当于2*X,部分积加 2X后右移2位;11 相当于3*X,部分积加3X后右移2位。原码两位乘运算规则(部分积用三位符号位):例16:设X = 0.111111 ,Y = -0.111001,用原码两位乘求X*Y原。例17:设X = 0.100111, Y = 0.100111,用原码两位乘求X*Y原。补码乘法运算补码乘法运算 原码乘法不难实现,但有原码乘法不难实现,但有两个问题两个问题: 1. 符号位与数值位分
36、开处理,不方便;符号位与数值位分开处理,不方便; 2. 若数据为补码形式,可能需要多于两次若数据为补码形式,可能需要多于两次 补码补码到到原码的变换。原码的变换。 也可以直接用也可以直接用补码补码完成乘法运算,即从补码开始,完成乘法运算,即从补码开始,直接得到补码的积。直接得到补码的积。补码一位乘法运算的补码一位乘法运算的算法规则算法规则补码一位乘算法规则:补码一位乘算法规则:1.1. X X、Y Y的符号位都参加运算,部分积采用的符号位都参加运算,部分积采用双双符号位;符号位;2.2.被乘数符号任意,乘数符号为被乘数符号任意,乘数符号为正正,按,按原码原码运算规则运运算规则运算。算。3.3.
37、被乘数符号任意,乘数符号为被乘数符号任意,乘数符号为负负,乘数补码,乘数补码去掉符号去掉符号位位与被乘数相乘,最后与被乘数相乘,最后加上加上-X X 补补进行校正。进行校正。4.4.进行进行n n次加运算,次加运算,n n次右移,次右移,积的符号位积的符号位由运算过程自由运算过程自动产生,这点与原码运算不同。动产生,这点与原码运算不同。5.被乘数和乘数符号均为任意,用比较法(Booth算法)。(1 1)X X、Y Y的符号位都参加运算,部分积采用双符号位;的符号位都参加运算,部分积采用双符号位;(2 2)乘数最低位之后增加一位附加位)乘数最低位之后增加一位附加位yn+1 ,且令初值且令初值yn
38、+1=0;(3 3)每位部分积运算规则如下:每位部分积运算规则如下:yn yn+1= 00 时,时, 部分积加零,再右移部分积加零,再右移1位位;yn yn+1= 01 时,时, 部分积加部分积加 X补,补, 再再右移右移1位位;yn yn+1= 10 时,时, 部分积加部分积加 -X补,补, 再再右移右移1位位;yn yn+1= 11 时,时, 部分积加零,再右移部分积加零,再右移1位;位;(4 4)进行进行n+1n+1次加法,次加法,n n次右移,次右移,积的符号由运算过程自动产生。积的符号由运算过程自动产生。例18:已知X补=1.0101,Y补=0.1101,用补码一位乘求X*Y补。例1
39、9:已知X补=0.1101,Y补=1.0101,用补码一位乘求X*Y补。例20:已知X补=1.1101,Y补=0.1101,用补码一位乘求X*Y补。例21:已知X补=0.0111,Y补=1.1001,用补码一位乘求X*Y补。补码一位乘法运算实例(比较法)补码一位乘法运算实例(比较法)已知已知: X补补 = 0.1101 Y补补 = 0.1011 部分积部分积 乘数乘数 yn yn+1 0 0. 0 0 0 0 0.1 0 1 1 0+1 1. 0 0 1 1 1 1. 1 0 0 1 1 0 1 0 1 1 1 1. 1 1 0 0 1 1 0 1 0 1+0 0. 1 1 0 1 0 0.
40、1 0 0 1 0 0. 0 1 0 0 1 1 1 0 1 0+1 1. 0 0 1 1 1 1. 0 1 1 1 1 1. 1 0 1 1 1 1 1 1 0 1+0 0. 1 1 0 1 0 0. 1 0 0 0 1 1 1 1 则则 -X补补 = 1.0011 X*Y补补 = 0.10001111 例22:X补补 = 1.0101 Y补补 = 1.0011,用比较法求,用比较法求X*Y补补 例23:X补补 = 1.1101 Y补补 = 0.0111,用比较法求,用比较法求X*Y补补 原码原码除法除法(以定点小数为例以定点小数为例) 基本公式:基本公式: 设设 被除数被除数 X原原 =
41、xf . x1 x2 x n 除除 数数 Y原原 = yf . y1 y2 y n 则则: : 若若 0 X Y X Y原原 =( xf yf ). ( X* Y* ) 其中,其中, X* 和和Y*分别是分别是X和和Y的绝对值的绝对值例如:例如: X = 0.1011 Y = - 0.1101 笔算除法过程笔算除法过程 0.1101 0.1101 0.10110 -0.01101 0.010010 -0.001101 0.0001010 0.00010100 -0.00001101 0.00000111原码除运算方法分析原码除运算方法分析(以定点小数为例以定点小数为例)机器实现问题:机器实现问
42、题: 1. 需单独设计比较器线路;需单独设计比较器线路; 2. 需需2n位的减法器线路。位的减法器线路。 解决方案:解决方案: 1. 比较比较操作改由操作改由“试减试减”实现;实现;2. 将除数右移改为将除数右移改为部分余数左移部分余数左移; 3. 减法由减法由+-Y补补转化为加法实现。转化为加法实现。原码恢复余数除法的算法规则原码恢复余数除法的算法规则1.1.除法运算前,应满足条件:除法运算前,应满足条件:X X* *YY* *, ,且且Y Y* *00, ,否则,按溢出否则,按溢出或非法除数处理;或非法除数处理;2.2.符号位不参与运算符号位不参与运算,单独处理:,单独处理:q qf f=
43、 x= xf f y yf f ; ;3.3.部分余数采用部分余数采用单符号位或双符号位单符号位或双符号位;4.4.每步部分余数运算规则:每步部分余数运算规则: 5.5.共需经过共需经过n+1n+1次取商和次取商和n n次部分余数的左移实现。次部分余数的左移实现。余数为正,商上余数为正,商上1 1,余数和商左移一位余数和商左移一位,减除数;,减除数;余数为负,商上余数为负,商上0 0,需通过,需通过加除数来加除数来恢复余数,恢复余数,余数余数左移一位减除数,商左移一位。左移一位减除数,商左移一位。 被除数(余数)被除数(余数) 商商 说说 明明 0. 1 0 1 1 0. 0 0 0 0+ 1
44、. 0 0 1 1 + -Y *补补 (减除数(减除数) 1. 1 1 1 0 余数余数 0, 商上商上1 1. 0 0 1 0 0 0 0 0 1 左移一位左移一位+ 1. 0 0 1 1 + -Y *补补 0. 0 1 0 1 余数余数 0, 商上商上1 0. 1 0 1 0 0 0 0 1 1 左移一位左移一位+ 1. 0 0 1 1 + -Y *补补 1. 1 1 0 1 余数余数 0, 商上商上1例如:例如: X = -0.1011 Y = - 0.1101 X原原= 1.1011 Y原原= 1.1101 X* = 0.1011 Y* = 0.1101-Y*补补 = 1.0011恢复
45、余数法恢复余数法X/Y原原=0.1101R原原=0.01112 2- -4 4例例24: 假如假如X = -0.1001 Y = - 0.1101 ,用原码,用原码的恢复余数法计算的恢复余数法计算X/Y原原原码加减交替除法算法规则原码加减交替除法算法规则1.1.除法运算前,应满足条件:除法运算前,应满足条件:X X* *YY* *, ,且且Y Y* *00, ,否则,按溢否则,按溢出或非法除数处理;出或非法除数处理;2.2.符号位不参与运算符号位不参与运算,单独处理:,单独处理:q qf f= x= xf f y yf f ; ;3.3.部分余数采用部分余数采用单符号位或双符号位单符号位或双符
46、号位;4.4.每步部分余数运算规则:每步部分余数运算规则: 余数为正,商上余数为正,商上1 1,余数左移一位余数左移一位,减除数;,减除数;余数为负,商上余数为负,商上0 0,余数左移一位余数左移一位,加除数;,加除数;5.5.共需经过共需经过n+1n+1次取商和次取商和n n次部分余数的左移实现(次部分余数的左移实现(n n为除数为除数的有效位数)。的有效位数)。 被除数(余数)被除数(余数) 商商 说说 明明 0. 1 0 1 1 0. 0 0 0 0 试减试减+ 1. 0 0 1 1 + -Y *补补 (减除数减除数) 1. 1 1 1 0 余数余数 0, 商上商上1 1. 0 0 1
47、0 0 0 0 0 1 左移一位左移一位+ 1. 0 0 1 1 + -Y *补补 0. 0 1 0 1 余数余数 0, 商上商上1 0. 1 0 1 0 0 0 0 1 1 左移一位左移一位+ 1. 0 0 1 1 + -Y *补补 1. 1 1 0 1 余数余数 0, 商上商上1 例如:例如: X = -0.1011 Y = - 0.1101 X原原= 1.1011 Y原原= 1.1101 X* = 0.1011 Y* = 0.1101-Y*补补 = 1.0011加减交替加减交替 除除 法法X/Y原原= 0.1101R = 0.0111 2 2- -4 4例例25: 假如假如X = -0.
48、1001 Y = - 0.1101 ,用原码,用原码的加减交替法计算的加减交替法计算X/Y原原补码除法(加减交替法)补码除法(加减交替法) 运算规则 符号位参加运算,除数和被除数均用补码表示; 第一步的运算 被除数与除数同号,被除数减去除数,加-y补; 被除数与除数异号,被除数加上除数,加y补; 后续步骤的运算 余数与除数同号,商上1,余数左移一位减去除数; 余数与除数异号,商上0,余数左移一位加上除数。 重复步骤 ,共做n次部分余数左移,n次加法,n+1次取商,最后一位商恒置1,不用求。如果对商的精度没有特殊要求,一般可采用“末位恒置1”法,此法操作简单,易于实现 。2022年6月1日星期三
49、81例26.设 x = 0.1011,y = 0.1101,求 并还原真值。 补补xyx补补 = 1.0101y补补 = 0.1101 y补补 = 1.00111 . 0 1 0 10 . 1 1 0 11 . 0 0 1 10 . 1 1 0 10 . 1 1 0 10 . 0 0 0 0异号做加法异号做加法10 . 0 0 1 0同号上同号上“1”1 . 0 1 1 11 异号上异号上“0”+y补补1 . 1 0 1 11 0 异号上异号上“0”+y补补0 . 0 0 1 11 0 0同号上同号上“1”0 . 0 1 0 0110 . 1 1 1 01 011 . 0 1 1 01 0 0
50、1末位恒置末位恒置“1”0 . 0 1 1 01 0 0 1 1 补补= 1.0011xy0011+y补补xy= 0.1101则则被除数被除数(余数余数) 商商 说说 明明例27:已知x=0.1001,y=0.1101,用补码加减交替法求x/y补。例28:已知x=-0.1001,y=0.1101,用补码加减交替法求x/y补。三、浮点数的运算三、浮点数的运算浮点数加减运算浮点数加减运算 由对阶、由对阶、 尾数加减、尾数加减、 规格化、规格化、 舍入和结果判溢出舍入和结果判溢出五步五步实现。实现。浮点数乘除运算浮点数乘除运算 由阶码加减由阶码加减 、尾数乘除、规格化、舍入和结果判、尾数乘除、规格化