一.基本知识点
1.定点加法
最需要掌握的就是利用变形补码的符号位进行溢出检测。
变形补码就是用两个二进制位来表示数据的符号位:负数 ---- 11, 正数 ----- 00.
然后对两个数据进行正常的加法运算,若运算结果是 “ 01 ” 或 “ 10 ”,则说明发生了 正上溢 或 负上溢。
其中,第一个 符号位就是真正的符号位,第二个符号位是数值部分溢出的。
相关例题是 计算机组成原理(微课版) 谭志虎 第三章课后习题:
(1)3.4
已知x和y,用变形补码计算x+y,并判断结果是否溢出。
(1) x=0.11010,y=0.10111。
(2) x=0.11101,y= - 0.10100。
(3) x= - 0.10111,y= - 0.11000。
2.定点减法
减法是通过将其转换成加法来做的。
例如:x - y = x + (-y)
相应的,[x - y] 补 = [x]补 + [-y]补
相关例题:
(1)3.5
已知x和y,用变形补码计算x - y,并判断结果是否溢出。
(1) x=0.11011,y=0.11101。
(2) x=0.10111,y =0.11110。
(3) x= - 0.11111, y= - 0.11001。
3.定点乘法
(1)原码一位乘法
1)数值位有 n 位,则计算过程有 n 次加法,n 次右移。
可以根据 右移 的次数来判断计算是否结束。
2)进行右移操作时,是逻辑移动,即所有数值都要参与移动,包括符号位。
3)每次做加法时,是根据 乘数的最后一位数值来判断的,是 1 , 则加 | x |;是 0,则加 0.
4)最后一步要进行移位操作。
5)相关例题:3.6
用原码一位乘法计算x * y。
(1) x= - 0.11111, y= 0.11101。
(2) x= - 0.11010, y= - 0.01011。
(2)补码一位乘法
1)数值位 n 位,则有 n 次右移。根据右移次数来判断操作是否结束。
2)乘数最开始要在最后补一位 0.
3)每次加法操作时,要看 乘数的最后两位,最后一位 - 次位 = 1,则加 | x | 补; =0,则加0;等于 - 1,则加 | -x| 补。
4)最后一步不移位。
5)相关例题:3.7
用补码一位乘法计算x * y。
(1) x= 0.10110, y= - 0.00011。
(2) x= - 0.011010,y= - 0.011101。
4.定点除法
(1)原码恢复余数除法
1)第一步要先做 +【-| y |】补,进行比较操作。
2)余数 R > 0,上尚1,余数和商同时左移一位, 做 -| y| 操作,即 +【| - y|】
余数 R < 0, 上商0,余数和商同时左移一位,做 +| y| 操作,恢复余数。
3)数值位为 n,左移 n 次,以此来判断操作是否结束。
(2)原码不恢复余数除法
1)第一步要先做 +【-| y |】补,进行比较操作。
2)余数 R > 0, 上商 1,余数和商同时左移一位,做 +【| - y|】操作
余数 R < 0, 上商0,余数和商同时左移一位,做 +【| y|】操作
3)余数 R = 0 时,归到 > 0 的范围内,还是要继续操作的。
4)最后得出来的余数有可能是负余数,这时要加上 y 值,使其恢复成正余数,这才是真正的余数。
5)数值位为 n,左移 n 次,以此来判断操作是否结束。
6)相关例题:3.8
用原码不恢复余数法计算x ÷ y。
(1) x= 0.10101, y= 0.11011。
(2) x= - 0.10101, y= 0.11011。
(2) x= - 0.10101, y= 0.11000。
5.总结
(1)不管是定点数的加减运算还是乘除运算,进行数据移位时都是逻辑移位,即所有的数值位都要参与移动,包括符号位。
(2)四种运算都可以利用 数值位 n 位,则要进行 n 次移动 这个条件作为操作是否结束的标志。
(3)定点数的加减运算是进行 逻辑右移 ,乘除运算 是进行 逻辑左移。