1、原码一位乘,符号位和数值位分开计算,数值位取绝对值进行计算,这也是为什么原码一位乘的移位是逻辑移位的原因。
2、除数每有一位数值位,就要计算一次,计算之后又要将乘数无用的数值位剔除,所以加 n 次,移位 n 次
具体过程描述:
1、将两个数符号位取出,得到符号位
2、将 0 写入部分积,乘数写入 乘商寄存器
取乘数的最后一位 * |x| 放到部分积
按照加法运算计算
右移
重复上述步骤,直到 乘商寄存器中没有乘数为止
1、补码一位乘有两种方式:
校正法:
1) 由于校正法可以看作 被乘数补码 和 乘数绝对值的 原码一位乘 再加上 ys * [-x]补,所以是 移位 n 次,加 n 次,校正的那次加法不算在内,做题时要注意
2) 符号位 “原码一位乘按照原码一位乘法来”,最终符号等于正常加法的符号
booth算法:
1) 符号位参与运算,也正因为如此,加法运算多了一次,n + 1, 移位运算 n 次
2) 最后符号位所在位运算不移位
3) 由于符号位参与运算,符号自然产生
校正法具体过程描述:
1) 取出乘数最后一位,部分积加 最后一位 * [x]补
2) 到了所有乘数位数均用完的时候,若乘数为负数,则加 [-x]补
3) 符号位自然产生,不用运算。
booth算法具体过程描述:
1) 设置 y(n + 1)
2) 用 y(n + 1) 减去乘数最后一位,得到数 i
3) 将 i == 0 ? 0 : [i * x]补 放到部分积做加法
3) 将乘数最后一位放到 y(n + 1),整体右移
4) 执行直到最后一步不右移
原码两位乘:
1) 符号位 和 数值位 分开运算
2) 被乘数取三位符号位,乘数依照数值位数的奇偶来添加符号位:
偶数:添加两位,最后一步不移位,加 n / 2 + 1 次,移位 n / 2 次
奇数:添加移位,最后一步移位,加 (n + 1) / 2 次,移位 (n + 1) / 2
3) 原码一位乘只涉及加 |x| 或者 加 0,而原码两位乘还涉及到 - x,所以用补码表示,于是移位时候的补位遵循补位规则(算数右移)
4) 因为原码两位乘有个 + 2 x 的操作,所以为了正确的保留符号,取三位符号位
具体过程描述:
确定乘数添加的符号位数,欠账寄存器置 0
取乘数最后两位数值,转化成 十进制数 后加上 欠账寄存器数值
设最后得到的值为 i, 如果
1) i = 0, 1, 2, 则将 i * [x]补 (注意,转化成移位运算) 置于部分积做加法,0 赋值给欠账寄存器
2) i = 3, 则将 [-x]补 置于部分积做加法, 1 赋值给 欠账寄存器
3) i = 4, 则加 0,将 1 赋值给 欠账寄存器
4) 最后一步看是不是加 0,不是就移位,是就不移位
补码两位乘:
1) 符号位参与运算,符号自然产生
2) 符号位位数的选取与原码两位一致
1、在算之前可以大概估算一下符号位,作为检验正误的手段也不错。