原码一位乘、二位乘

时间:2024-05-20 19:22:37

原码一位乘:

异号相乘,符号为负;
同号相乘,符号为正。

运算法则:
原码一位乘、二位乘

求p的绝对值
①被乘数和乘数均取绝对值参加运算,符号位单独考虑
②部分积的长度同被乘数,初值为0
从乘数的最低位yn开始判断,若yn=1,则部分积加上被乘数x的绝对值,然后右移一位,若yn=0,则部分积加上0,然后右移一位。

例:x=0.1101,y=-0.1011,试利用计算机实际演算标准步骤的原码一位乘来计算[x*y]原。
解析:|x|=0.1101,|y|=0.1011
原码一位乘、二位乘
原码一位乘、二位乘

由上述可归纳:

  1. 乘法运算可用移位和加法来实现,两个n位数相乘,共需要进行n次加法运算和n次移位操作。
  2. 上述运算规则同样适用于整数原码,为了区别,将“.”改为“,”

原码二位乘

原码二位乘的引入是为了提高乘法运算的速度。

原码一位乘与原码二位乘异同点:

相同点 运算过程中,符号位运算与数值位运算分开进行
不同点 原码一位乘每次都采用乘数的一位来决定新的部分积的形成;原码二位乘采用乘数的两位来决定新的部分积的形成

原码二位乘的状态:

乘数 新的部分积
00 新部分积=原部分积右移2位
01 新部分积=(原部分积+被乘数)右移2位
10 新部分积=(原部分积+被乘数*2)右移2位
11 新部分积=(原部分积+被乘数*3)右移2位‘

Cj触发器00-11只能表示0-3倍,所以要引入标志位Cj。通过乘数“11”表示的3倍,再加上Cj位置“1”来实现加1倍,可以实现4倍被乘数(加几倍被乘数都是加在部分积上的)
但是,4-1倍被乘数|x|中(|x|是绝对值,因为符号位分开运算),有-|x|,所以要采用“[-|x|]补”补码来实现,参与原码两位乘运算的操作数都是绝对值的补码(绝对值是正数,所以原码=补码。因为实际上是加3倍的|x|,所以结果为正,补码结果=原码结果)。

原码一位乘、二位乘
例:已知x=-0.1101,y=0.0110,用原码二位乘法[x*y]原?
|x|=0.1101, 2|x|=1.1010,|y|=0.0110
原码一位乘、二位乘
原码一位乘、二位乘
由上述归纳:

  • 当乘数的位数为偶数时,需要做n/2次移位,最多做(n/2)+1次加法;
  • 当乘法的位数为奇数时,需要做(n/2)+1次移位,最多做(n/2)+1次加法。

明显比原码一位乘的移位次数和加法次数要少,所以速度更快。

《计算机组成原理》——唐朔飞

此次分享就到这里,欢迎大家指导指正~ 我是爱吃肉的小白yyyloki,如果你觉得不错的话点个赞????吧!或者你可以关注,持续更新计组的内容(ps:也许期末用的上)。我们下次见~886

原码一位乘、二位乘