计算机组成原理--加减交替做除法?

  做除法时,不过就是:相减、移位、相减、移位 ... 。
  计算机做除法时,可以由硬件进行控制,
不够减的余数屏蔽掉。 那么,做除法时,就不必考虑 “恢复余数” 和 “不恢复余数” 了。 此法详情可见做而论道以前写的博文(点击查看)。

  用加减交替法做除法,属于 “不恢复余数法”。 本来,做而论道也不打算讨论这种根本就用不着的方法了,但是,这种方法在网络上流传甚广,影响颇大。 所以,还是揭露一下吧,免得误导初学者。 话不多说,直接上图。

  这张图片是某个著名考研辅导材料的视频截图。 做而论道稍微调整了一下各部分的布局,以显得紧凑一些。 如果想要查看原图,你可以点击这几个链接:点击查看点击查看点击查看点击查看。 除此之外,网上还有许多的,大家就自己去搜吧。

  下面,做而论道就说说这张图的诡异之处。

  首先,就是字长与位数的差异。
  图中已经明确给定了 “机器字长为 5 位”。那么,解题时,就必须按照 5 位来求解。
  但是,图中的补码,都采用了双符号位,后面的计算过程中,都是用 6 位二进制数来讲解。
  5 位的字长,能容下 6 位二进制数吗?
  为什么不按照字长来解题呢? 真是很令人费解!
  不按照题目给定的条件和要求来做题,考研,还有希望吗?

  第二,是 “逻辑移位”。 
  学过《计算机组成原理》就知道,左移操作有两种:算术左移逻辑左移
  书中,在前面讲过:
算术左移适用于带符号数逻辑左移适用于无符号数
  本题目要求用补码解题,这一定就是带符号数了,显然,应该用
算术左移来移位。
  如果不能用算术移位,非得用逻辑移位,那么,你总得给出一个说明吧。
  总不能如此忽视前面讲过的内容吧?

  难道,前面的内容,老师讲错了? 或者是你没有看见?

  第三,题目要求是求:x / y。
  
题目给定的初始数据 ( x、y ) 都是真值,那么运算结果 ( x / y ) 也应该是真值。 而图中的计算过程都是用补码来讲解的。 最后的计算结果,也是 x / y 的补码,并不是题目要求的真值。 
  得出的补码,还必须换算成真值,才能满足题目的要求。
  既然是考研辅导材料,严谨,还是必须的。

  第四,商的末位恒置一。
  本算法得出的商,实际上是商的补码。 在补码的末位恒置一,还不知道这是什么理论。

  既然商的补码末位恒置 1,这也就是说:在商的末位,恒定为 1!
  而实际上,x、y 的数值是多变的,x / y 的商的末位,你怎能肯定就是 1 ?

  这也不好理解呀!
  这也是很难让人信服的。


  其实,除法并不难,小学生都是会做的,何况《计算机组成原理》还是大学生的课程!
  之所以让人感到为难,是计算机专家故弄玄虚,总是用
二进制小数来拨三弄四。 而实际上,计算机中,根本就没有小数点。 专家讲的这些过程以及运算结果,完全不符合计算机中的实际情况。

  把这题目,稍微整理一下,就好理解了。

  题目中的 x、y 都是二进制数。把具体数据代入 x / y,就是:
    x / y = (+0.1000)  / (-0.1011)
       = (+1000 )  /  (-1011) // 分子分母小数点都右移四位,值不变

  在计算过程中,x 左移了四次,在右边又添了四个 0。因此,实际上参加计算的则是:
    x / y = (+1000 0000) / (-0.1011)
       = (+128 )  /  (-11)  // 换算到十进制数

  现在,就是十进制的除法运算了,看起来,是不是就透亮多了?
    x / y 的商数,显然就是:-11;
    x / y 的余数,就应该是:+7。

  又因为,x 左移四次,右边添了四个 0,这就相当于 “把小数点右移四位”。
  被除数 x 如此变化,而 y 没变,那么,商和余数,也都应该 “小数点右移四位”。

  再结合上图中运算结果,就都转换一下吧。
    商数的补码,现在就是:10101。
      换算成真值,就是:Q =-1011 =-11 (十进制)。
    余数的补码,现在就是:00111。
      换算成真值,就是:R = +111 = +7 (十进制)。

  这就是 “以补码加减交替做除法” 的运算结果,和前面用十进制数计算的结果完全相同。


  对于这个图片中的计算结果,只能说【很巧啊】!
  因为算出的商,恰好是一个奇数(-11),商的末位,还真是 1  !
  如果用这个算法来计算:128 / 10,商,就应该是偶数(12)了。
  那么,商末位恒置一,又该怎么解释?

  这个事,还是下次再说吧。

--本文完--

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值