在进行除法运算时,也就是多次进行:移位、相减、移位、相减 ... 。
移位,可以是 “被除数左移”,也可以是 “除数右移”。
相减时,如果够减则减,商上 1;如果不够减就不减,商则上 0。
怎么知道够减不够减?
人工计算时,是用肉眼观察出来的。
由计算机计算时,当然就得先减一遍了。
如果减法器输出的借位为 1,这就代表不够减。 那么,此次的差,就不要保存了。 这就是【不够减就不减】。 在上篇博文(点击查看)中,做而论道就实现了这个想法。
既然 “不够减的差”,不需要保存,在电路中,也根本就没有保存。 那么,还需要什么 “恢复余数” 吗? 显然是不需要的。 即使,你非要恢复余数,也是办不到的。 因为,不够减时的余数,根本就不存在。
哦,忘记说了,相减得到的差,在计算机专业,是叫做 “余数” 的。 。
计算机专业所说的 “恢复余数”,也就是:把差,再加上除数,恢复为原来的被除数。
嗯? 这操作,好像是 “恢复被除数” 吧!
在做而论道设计的除法电路(点击查看)中,是利用移位寄存器的功能,来选择保留或放弃余数的。 这部分电路,截图如下所示。
图中 U1U2 向下所输出的,就是 “被减数-减数” 的差了,也就是所谓的余数。
这个余数,能否进入移位寄存器 U3U4 呢? 这取决于 S1 脚所输入的电平。
在做除法运算时,S1 的信号来自于 “借位的非”。 可见上图中最下方的示意图。
如果够减,减法电路输出的借位就是 0,反相后为 1。 这个 1,就会使移位电路处于 “并行置数” 的状态。 此时,给 U3U4 一个时钟脉冲,减法电路输出的差,就会并行进入 U3U4。 差进入 U3U4 后,当然就不够减了,借位又自动改变为 1,反相后为 0。 这个 0,就使 U3U4 处于 “左移” 的状态。 此时,再给它一个时钟脉冲,U3U4 中的内容就会左移一位,并将上次 “借位的非(即 1)” 从 SR 端移入寄存器,作为 “本位的商”。
如果不够减,减法电路输出的借位就是 1,反相后为 0。 这个 0,只能使移位电路处于 “左移” 的状态。 此时,给它一个时钟脉冲,U3U4 中的内容就会左移一位,并将 “借位的非(即 0)" 从 SR 端移入寄存器,作为 “本位的商”。
经过上述介绍可知:
够减时,要用两个时钟脉冲,分别进行 “并行置数” 和 “移位上商” 的操作。
不够减时,仅需一个时钟脉冲,只进行 “移位上商” 的操作。
可以看出,在不够减时,不但没有保存无用的余数,而且,还因为少了一步 “置数”,操作速度反而更快了。 这个优点,完全是由做而论道的巧妙设计得来的。
以上就是利用移位寄存器的功能,选择保留或放弃余数的电路和工作过程。 关于移位寄存器 74LS194 的完整功能,可见做而论道写的以前写的博文(点击查看)。
另外,还可以使用 “二选一” 门电路,来满足 “不够减就不减” 的设计要求。
当然,不够减就不减,只是人工手算时的做法。 如果由计算机来做,减法,还是要减的,只是不输出差而已。 话不多说,直接上图。
图中左上方有两组四位的拨动开关,用来输入数据 A 和 B。
图中中间的器件是算术逻辑单元 73LS181,在计算机组成原理课程中,介绍过它。 当在其 M S3S2S1S0 端输入 0 0110 时,181 的功能就是减法运算:F = A-B,并且输出借位 C。
图中下部的器件是 73LS157,它内含四个二选一门电路。 输入有两路,分别接到 A 和 F。当其引脚 1 输入低电平时,157 输出的就是 F,反之,则输出 A。
观察图中的红蓝点,可见:A = 1100 = 12,B = 0101 = 5。
算逻单元(即减法器)输出的是:F = A-B = 0111 = 7,以及 C = 0。这是够减的状态。
C = 0 送到 U2,U2 即选择 F 作为输出信号,即,余数 = 0111 = 7。
如果把本电路作为除法器来使用,本电路将会输出一位商。此时的商,就是 1。
改动一下输入数据吧,来看看下图。
图中的 A = 0100 = 4,B = 0101 = 5。 与前一图相比,仅仅是 A 改动了一位数。
此时,减法器的输出则是:F = 4-5 = 1111 = -1。同时有:C = 1,代表不够减。
C = 1 送到 U2,U2 即选择 A 作为输出信号,即,余数 = 0100。
如果把本电路作为除法器来使用,此时输出的一位商,就是 0。
综上所述,本电路的功能就是:
够减则减,输出差、不够减就不减,输出原来的被减数。
按照这个电路,根本就不会输出:不够减时的差 (也就是计算机专业说的 “余数”)。
做而论道是用现成的集成块,设计了 “自动选择余数的电路”。 虽然实现了 “不输出不够减时的差”,但是,电路确实是显得庞大又啰嗦一些了。 假如,由 CPU 设计人员出手,直接设计集成电路内部的电路,一定会有更简练的设计结果。
写了这么多,本博文的结论就是:不够减的余数,是不存在的。
因此,计算机专业教材中所说的:恢复余数法,就没有什么根据了。
不够减的余数,根本就不存在,你还恢复个啥!
--本文完--