计算机组成原理——第二章(12)

这一小节我们讲一下原码的乘法运算,补充一下之前讲到的运算器ACC、X、MQ运算过程,原码一位乘法机器模拟和手算模拟

原码的乘法运算

1.手算乘法

 小学老师教我们乘法是怎么样的呢?乘数从最低位出发到最高位,每一位与被乘数相乘,得到的结果错位相加,就像这样

原理也比较简单,我们可以分别把0.211看成2*10^{-1}+1*10^{-2}+1*10^{-3},然后按照分配率与0.985相乘,就可以得到结果

上面的例子是十进制的,那如果是二进制呢?其实也是一样的,只不过相加的时候十进制是逢十进一,二进制是逢二进一,这里我就不过多赘述

接下来我们思考几个问题:

实际数字有正负,符号位如何处理?

乘积的位数扩大一倍,如何处理?

4个位积都要保存下来最后统一相加?

2.原码一位乘法

2.1机算模拟

接下来我们先解决上面提到的第一个问题,符号位如何处理,我们可以用异或来解决,符号位x_{s}\oplusy_{s},然后数值位取绝对值进行乘法运算 

大家还记得我们之前学过的运算器里面ACC、MQ、X吗,我们现在来深挖一下里面的运算过程

 设机器字长为n+1=5(含移位符号位)[x]原=1.1101,[y]原=0.1011,采用原码一位乘法求x*y

  X里面放被乘数,MQ放乘数,但是大家看表格会发现ACC怎么还表示乘积高位?MQ是乘积低位?这个我们接下来就详细聊一下

首先X里面放被乘数,MQ放乘数就是这样子的

 根据我们乘法的运算法则,乘数从最低位向最高位开始,每一位都乘以被乘数,得到的数错位相加。那我们MQ最低位是1,那么1*01101=01101,ACC初始是00000,相加之后00000+01101=01101

 那么第二次相乘的时候我们需要错位相加,所以我们就将ACC和MQ逻辑右移,高位补0,这个方法很妙,因为右移之后,我们可以直接相加到ACC且实现了错位。之前用过的MQ最低位的1之后也不会再用了,所以把它舍弃了也没关系

接下来都是重复的操作,MQ最低位乘以被乘数,然后加到ACC,ACC右移,高位补0,MQ丢弃最低位,以此类推.......

最后什么时候停止呢?就是一直到MQ的最低位是乘数的符号位的时候就停止运算。

别忘了最后一步,我们需要将 符号位x_{s}\oplusy_{s}得到的结果代替ACC的最高位。

现在大家理解为什么ACC乘积高位、MQ乘积低位含义了吧

 2.2手算模拟

手算模拟其实和计算模拟一样,上面已经提到过了,咸鱼学长说若当前运算位=1,则(ACC)+[|x|]原,若=0,则(ACC)+0,其实我个人认为就是当前运算位的数*被乘数的总体,再加到ACC就行了,所以手算模拟我们就不过多赘述

  • 12
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值