定点数加减法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
补
1. 补码加法运算
• 公式:[x+y]补=[x]补+[y]补 • 以模为2定义的补码为例,分四种情况证明 该式的正确性(纯小数)
x [ x ]补 2 x 2 x 0 x 1 2 ( n 1) 1 x 0
•
• • • •
①
设x>0, y>0, 则x+y>0
③ 补码运算规则
根据以上讨论,可将补码加减规则归纳如下:
参加运算的操作数用补码表示。 符号位参加运算。 若指令操作码为加,则两数直接相加;若操作码为减,则将减数连同 符号位一起变反加1后再与被减数相加。 运算结果用补码表示。
【例3-3】 [X ] = 00110110,[Y ] =11001101,求[X+Y ] ,[X-Y ] 。 补 补 补 补
浮
② 尾数求和
[M X ] 00.011011 补
+
[ M Y ]补 11.010101
11.110000
③ 规格化及判溢出 左规得 [X+Y]浮=1110;11.10000 ④ 舍入 由于是左规,结果不需要舍入。
最后运算结果的真值为
X+Y=2
0102
(-0.100000)2。
• ① +②得 [–y]补+ [y]补= [x–y]补–[x]补+[x+y]补–[x]补 =[x–y]补+[x+y]补–[x]补–[x]补
• = [x–y+x+y]补–[x]补–[x]补 =[2x]补–2[x]补=0 • 从而有 [–y]补= –[y]补 [mod 2] • 只要求得[–y]补,就可以变减法为加法,已知[y]补, 求[–y]补的法则是: • 对[y]补各位(包括符号位)取反,然后在末位加上1,就 可以得到[–y]补。
通过分析恢复余数法可以发现: 当余数A为正时,上商1,下一步A左移 一位再减除数B,相当于执行2A-B的运 算; 若余数A为负,上商0,并加除数以恢复 余数即A+B,下一步左移一位减去除数B, 这实际相当于执行 2(A+B)- B = 2A+B 故在出现不够减时,并不需要恢复余数, 只是下一步要进行2A+B的操作,因此称 为 不恢复余数法或加减交替法 。 其算法流程如右图所示。 图中使用3个寄存器A、B和C。运算开始 时,n位除数存放在B中,2n位被除数存 放在A和C寄存器中。除法完成后商放在 C寄存器中,余数放在A寄存器中。 从图中可以看出,在重复n-1次操作后 ,如果A中的余数为负,需要恢复余数 做A+B。这一步是必需的,因为最后的 寄存器A中应获得正确的正余数。
– 在用原码进行加减运算时,计算机实际操作是 加还是减 取决于指令中的操作码和两个操作数 的符号;运算结果的符号判断也较复杂。因此 这种方法很少使用。
(2)补码加减运算
① 补码加法运算 [X ]补+[Y ]补 =[X +Y ] 补 ② 补码减法运算 [X–Y ] =[X +(-Y )]补=[X ] +[-Y ] 补 补
实现无符号整数一位乘法的硬件原理框图如下图所示。 图中,用进位触发器Ca保存每次累加暂时产生的进位,它的初值为0。在被 乘数送入B、乘数送入C,A和Ca被置0后,控制逻辑控制乘法进入第1个节拍, 这时由乘数位C0产生“加B/不加”(不加相当于加0)信号,用以控制被乘数B 是否与上次部分积相加产生本次部分积,然后Ca、A、C一起右移一位。重复n个 节拍的操作后所得到的乘积存放在A和C中。
3.2.2 定点数运算方法
数值运算的核心是指加、减、乘、除四则算术。由于计算机中 的数有定点和浮点两种表示形式,因此相应有定点数的运算和浮 点数的运算。
1.定点加减运算
(1)原码加减运算
例如,加法指令指示做(+A)+(-B),由于一个操作数为负, 实际操作是做减法(+A)-(+B),结果符号与绝对值大的符号相 同。同理,在减法指令中指示做(+A)-(-B),实际操作是做加 法(+A)+(+B),结果与被减数符号相同。
3.定点数乘除运算
(1)无符号整数一位乘法
计算机中的乘法运算采用的方法是:将n位乘转换为n次“累加 与移位”,即每一步只求一位乘数所对应的新部分积,并与原部分 积作一次累加,然后右移一位。
右图是无符号整数一位乘的算法 流程图。图中使用了3个寄存器A、B 和C。 B用来存放被乘数; C存放乘数; A初值为0,然后存放部分积,最后 存放乘积高位。 由于乘数每乘一位该位代码就不再 使用,因此用A和C寄存器联合右移以 存放逐次增加的部分积,并且使每次 操作依据的乘数位始终在C的最低位。 乘法完成时,A与C存放的是最后乘积, 其中C的内容是乘积的低位部分。
(3) 63+66=129 0 1111111 0 1000001 1 0000001 正溢
(4) -63+(-66)=-129 1 1000001 1 0111110 0 1111111 负溢
① 采用一个符号位判断
两正数相加结果为负或两 负数相加结果为正,则溢 出
溢出= A n B nS n +A n B n S n
(3)溢出判别 在什么情况下可能产生溢出?
例:设定点整数字长8位,补码表示(最高位 为符号位),表示范围为-128127,运算结果 超出此范围就发生溢出。
(1)31 +13=44 0 0011111 0 0001101 0 0101100
(2)-31 +(-12)=-43 1 1100001 1 1110100 1 1010101
EX
EY
④ 舍入操作
恒舍法,恒进法,0舍1进法
下面举一个浮点加的实例。
【例3-12】 0.101011)2。 阶码
0102 0102 设有两个浮点数X=2 0.1101012,Y=2 (-
尾数 00.110101 11.010101
[X]浮=11,10; [Y]浮=11,11;
① 对阶
wenku.baidu.com
[E]补=[EX]补+[-EY]补=1110+0001=1111,即E =-1,将MX右移一位, 其阶码加1,得 [ X ] =11,11;00.011011(用0舍1入法)
【例3-11】
用不恢复余数法计算00001000÷0011。
解:A、C:00001000; B:0011; [-B]补:1101。 其运算过程如右图。
例 x =+0.1001 y = -0.1011 求[x/y]原
3.2.3 浮点数运算方法 1.浮点数加减运算
设有两个浮点数:X=Mx·2 ,Y=My· 2 。要实现X +Y的运算, 为什么不是阶码大 需要以下4个步骤才能完成。 的数向阶码小的数
在计算机中实现除法运算,着重要解决如何判断够减与否的问题, 可以用以下两种办法: ① 用逻辑线路进行比较判别,又叫做比较法。将被除数或余数减 去除数,如果够减就执行一次减法并商1,然后余数左移一位;如 果不够减就商0,同时余数左移一位。这种方法的缺点是增加硬件 代价。 ② 直接做减法试探,不论是否够减,都将被除数或余数减去除 数。若所得余数符号位为0(即正)表明够减,上商1;若余数 符号位为1(即负)表明不够减,由于已做了减法,因此上商0 并加上除数(即恢复余数);然后余数左移一位再做下一步。 这就是恢复余数法。
由补码定义,[x]补=x, [y]补=y, 所以[x]补+[y] 补=x+y=[x+y]补 ② x<0, y<0, 则(x+y)<0 由补码定义,[x]补=2+x, [y]补=2+y [x]补+[y]补=2+x+2+y=2+(2+x+y), 由于x+y为 负数,其绝对值又小于1,所以(2+x+y)就一定 是小于2大于1的数,上式等号右边的2必然丢掉, 又由于x+y <0,所以 [x]补+[y]补=(2+x+y)=2+(x+y)= [x+y]补
2. 补码的减法运算
• 公式[x–y]补=[x+(–y)]补=[x]补+[–y]补 • 只要证明 [–y]补= –[y]补,上式即得证。证 明如下:
• 由于 [x+y]补= [x]补+[y]补 ,可得 ① [y]补= [x+y]补–[x]补, • 又 [x–y]补= [x+(–y)]补= [x]补+[–y]补,同理可得 ② [–y]补= [x – y]补–[x]补
【例3-10】 1101*1011的 运算过程如图所示。
例2.13设x= –0.1101, y= –0.1011, 求[x×y]原= ?
• 上一例在演算时也可以先计算两小数的小 数部分,算完小数部分积后再考虑积的的 小数部分位数,添上小数点。
定点除法运算
遇到的问题
(2)无符号整数一位除法
① 对阶操作 ② 实现尾数的加(减)运算 ③ 结果规格化和溢出判断 a.左规 b.右规 对齐? 对阶的规则是:阶码小的数向阶码大的数对齐 若运算结果是非规格化的数,例如尾 数是11.1x„x或00.0x„x形式,就需 要将尾数左移,每左移一位,阶码减 1,直至满足规格化条件为止(即尾 若运算结果尾数发生溢出,例如尾数 数最高有效位的真值为1,或尾数符 为10.xx„x或01.xx„x形式,这并不 与最高有效位不等),这个过程称为 左规。在左规的同时应判断结果是否 表明浮点结果会溢出,此时需调整阶 会下溢,即阶码小于所能表示的最小 码,将尾数右移一位,阶码加1,称 负数。 为右规。右规时,应判断结果是否会 上溢,即阶码大于所能表示的最大正 数。
•
• ③ x>0, y<0 • [x]补=x, [y]补=2+y, [x]补+[y]补=x+2+y 有两种情况 • A: 当(x+y)≥0时,模2丢掉, • 又因为(x+y)≥0,所以[x]补+[y]补=2+x+y= x+y=[x+y]补 • B: 当(x+y)<0时, • 有:[x]补+[y]补=2+x+y =[x+y]补 • ④x<0, y>0 情况与③类似。
② 采用最高有效位的进位判断
溢出= C nC n 1 +C n C n符号位产生的进位与最高有 1 =C n C n 1
③ 采用变形补码判断(双符号位)
效位产生的进位情况不同, 则溢出
用S n 1 n分别表示结果最高符号位和第2符号位 、S
溢出=S n 1 S n
01:结果正溢
10:结果负溢
1. 补码加法运算
• 公式:[x+y]补=[x]补+[y]补 • 以模为2定义的补码为例,分四种情况证明 该式的正确性(纯小数)
x [ x ]补 2 x 2 x 0 x 1 2 ( n 1) 1 x 0
•
• • • •
①
设x>0, y>0, 则x+y>0
③ 补码运算规则
根据以上讨论,可将补码加减规则归纳如下:
参加运算的操作数用补码表示。 符号位参加运算。 若指令操作码为加,则两数直接相加;若操作码为减,则将减数连同 符号位一起变反加1后再与被减数相加。 运算结果用补码表示。
【例3-3】 [X ] = 00110110,[Y ] =11001101,求[X+Y ] ,[X-Y ] 。 补 补 补 补
浮
② 尾数求和
[M X ] 00.011011 补
+
[ M Y ]补 11.010101
11.110000
③ 规格化及判溢出 左规得 [X+Y]浮=1110;11.10000 ④ 舍入 由于是左规,结果不需要舍入。
最后运算结果的真值为
X+Y=2
0102
(-0.100000)2。
• ① +②得 [–y]补+ [y]补= [x–y]补–[x]补+[x+y]补–[x]补 =[x–y]补+[x+y]补–[x]补–[x]补
• = [x–y+x+y]补–[x]补–[x]补 =[2x]补–2[x]补=0 • 从而有 [–y]补= –[y]补 [mod 2] • 只要求得[–y]补,就可以变减法为加法,已知[y]补, 求[–y]补的法则是: • 对[y]补各位(包括符号位)取反,然后在末位加上1,就 可以得到[–y]补。
通过分析恢复余数法可以发现: 当余数A为正时,上商1,下一步A左移 一位再减除数B,相当于执行2A-B的运 算; 若余数A为负,上商0,并加除数以恢复 余数即A+B,下一步左移一位减去除数B, 这实际相当于执行 2(A+B)- B = 2A+B 故在出现不够减时,并不需要恢复余数, 只是下一步要进行2A+B的操作,因此称 为 不恢复余数法或加减交替法 。 其算法流程如右图所示。 图中使用3个寄存器A、B和C。运算开始 时,n位除数存放在B中,2n位被除数存 放在A和C寄存器中。除法完成后商放在 C寄存器中,余数放在A寄存器中。 从图中可以看出,在重复n-1次操作后 ,如果A中的余数为负,需要恢复余数 做A+B。这一步是必需的,因为最后的 寄存器A中应获得正确的正余数。
– 在用原码进行加减运算时,计算机实际操作是 加还是减 取决于指令中的操作码和两个操作数 的符号;运算结果的符号判断也较复杂。因此 这种方法很少使用。
(2)补码加减运算
① 补码加法运算 [X ]补+[Y ]补 =[X +Y ] 补 ② 补码减法运算 [X–Y ] =[X +(-Y )]补=[X ] +[-Y ] 补 补
实现无符号整数一位乘法的硬件原理框图如下图所示。 图中,用进位触发器Ca保存每次累加暂时产生的进位,它的初值为0。在被 乘数送入B、乘数送入C,A和Ca被置0后,控制逻辑控制乘法进入第1个节拍, 这时由乘数位C0产生“加B/不加”(不加相当于加0)信号,用以控制被乘数B 是否与上次部分积相加产生本次部分积,然后Ca、A、C一起右移一位。重复n个 节拍的操作后所得到的乘积存放在A和C中。
3.2.2 定点数运算方法
数值运算的核心是指加、减、乘、除四则算术。由于计算机中 的数有定点和浮点两种表示形式,因此相应有定点数的运算和浮 点数的运算。
1.定点加减运算
(1)原码加减运算
例如,加法指令指示做(+A)+(-B),由于一个操作数为负, 实际操作是做减法(+A)-(+B),结果符号与绝对值大的符号相 同。同理,在减法指令中指示做(+A)-(-B),实际操作是做加 法(+A)+(+B),结果与被减数符号相同。
3.定点数乘除运算
(1)无符号整数一位乘法
计算机中的乘法运算采用的方法是:将n位乘转换为n次“累加 与移位”,即每一步只求一位乘数所对应的新部分积,并与原部分 积作一次累加,然后右移一位。
右图是无符号整数一位乘的算法 流程图。图中使用了3个寄存器A、B 和C。 B用来存放被乘数; C存放乘数; A初值为0,然后存放部分积,最后 存放乘积高位。 由于乘数每乘一位该位代码就不再 使用,因此用A和C寄存器联合右移以 存放逐次增加的部分积,并且使每次 操作依据的乘数位始终在C的最低位。 乘法完成时,A与C存放的是最后乘积, 其中C的内容是乘积的低位部分。
(3) 63+66=129 0 1111111 0 1000001 1 0000001 正溢
(4) -63+(-66)=-129 1 1000001 1 0111110 0 1111111 负溢
① 采用一个符号位判断
两正数相加结果为负或两 负数相加结果为正,则溢 出
溢出= A n B nS n +A n B n S n
(3)溢出判别 在什么情况下可能产生溢出?
例:设定点整数字长8位,补码表示(最高位 为符号位),表示范围为-128127,运算结果 超出此范围就发生溢出。
(1)31 +13=44 0 0011111 0 0001101 0 0101100
(2)-31 +(-12)=-43 1 1100001 1 1110100 1 1010101
EX
EY
④ 舍入操作
恒舍法,恒进法,0舍1进法
下面举一个浮点加的实例。
【例3-12】 0.101011)2。 阶码
0102 0102 设有两个浮点数X=2 0.1101012,Y=2 (-
尾数 00.110101 11.010101
[X]浮=11,10; [Y]浮=11,11;
① 对阶
wenku.baidu.com
[E]补=[EX]补+[-EY]补=1110+0001=1111,即E =-1,将MX右移一位, 其阶码加1,得 [ X ] =11,11;00.011011(用0舍1入法)
【例3-11】
用不恢复余数法计算00001000÷0011。
解:A、C:00001000; B:0011; [-B]补:1101。 其运算过程如右图。
例 x =+0.1001 y = -0.1011 求[x/y]原
3.2.3 浮点数运算方法 1.浮点数加减运算
设有两个浮点数:X=Mx·2 ,Y=My· 2 。要实现X +Y的运算, 为什么不是阶码大 需要以下4个步骤才能完成。 的数向阶码小的数
在计算机中实现除法运算,着重要解决如何判断够减与否的问题, 可以用以下两种办法: ① 用逻辑线路进行比较判别,又叫做比较法。将被除数或余数减 去除数,如果够减就执行一次减法并商1,然后余数左移一位;如 果不够减就商0,同时余数左移一位。这种方法的缺点是增加硬件 代价。 ② 直接做减法试探,不论是否够减,都将被除数或余数减去除 数。若所得余数符号位为0(即正)表明够减,上商1;若余数 符号位为1(即负)表明不够减,由于已做了减法,因此上商0 并加上除数(即恢复余数);然后余数左移一位再做下一步。 这就是恢复余数法。
由补码定义,[x]补=x, [y]补=y, 所以[x]补+[y] 补=x+y=[x+y]补 ② x<0, y<0, 则(x+y)<0 由补码定义,[x]补=2+x, [y]补=2+y [x]补+[y]补=2+x+2+y=2+(2+x+y), 由于x+y为 负数,其绝对值又小于1,所以(2+x+y)就一定 是小于2大于1的数,上式等号右边的2必然丢掉, 又由于x+y <0,所以 [x]补+[y]补=(2+x+y)=2+(x+y)= [x+y]补
2. 补码的减法运算
• 公式[x–y]补=[x+(–y)]补=[x]补+[–y]补 • 只要证明 [–y]补= –[y]补,上式即得证。证 明如下:
• 由于 [x+y]补= [x]补+[y]补 ,可得 ① [y]补= [x+y]补–[x]补, • 又 [x–y]补= [x+(–y)]补= [x]补+[–y]补,同理可得 ② [–y]补= [x – y]补–[x]补
【例3-10】 1101*1011的 运算过程如图所示。
例2.13设x= –0.1101, y= –0.1011, 求[x×y]原= ?
• 上一例在演算时也可以先计算两小数的小 数部分,算完小数部分积后再考虑积的的 小数部分位数,添上小数点。
定点除法运算
遇到的问题
(2)无符号整数一位除法
① 对阶操作 ② 实现尾数的加(减)运算 ③ 结果规格化和溢出判断 a.左规 b.右规 对齐? 对阶的规则是:阶码小的数向阶码大的数对齐 若运算结果是非规格化的数,例如尾 数是11.1x„x或00.0x„x形式,就需 要将尾数左移,每左移一位,阶码减 1,直至满足规格化条件为止(即尾 若运算结果尾数发生溢出,例如尾数 数最高有效位的真值为1,或尾数符 为10.xx„x或01.xx„x形式,这并不 与最高有效位不等),这个过程称为 左规。在左规的同时应判断结果是否 表明浮点结果会溢出,此时需调整阶 会下溢,即阶码小于所能表示的最小 码,将尾数右移一位,阶码加1,称 负数。 为右规。右规时,应判断结果是否会 上溢,即阶码大于所能表示的最大正 数。
•
• ③ x>0, y<0 • [x]补=x, [y]补=2+y, [x]补+[y]补=x+2+y 有两种情况 • A: 当(x+y)≥0时,模2丢掉, • 又因为(x+y)≥0,所以[x]补+[y]补=2+x+y= x+y=[x+y]补 • B: 当(x+y)<0时, • 有:[x]补+[y]补=2+x+y =[x+y]补 • ④x<0, y>0 情况与③类似。
② 采用最高有效位的进位判断
溢出= C nC n 1 +C n C n符号位产生的进位与最高有 1 =C n C n 1
③ 采用变形补码判断(双符号位)
效位产生的进位情况不同, 则溢出
用S n 1 n分别表示结果最高符号位和第2符号位 、S
溢出=S n 1 S n
01:结果正溢
10:结果负溢