欢迎光临散文网 会员登陆 & 注册

如何在mc里打造一个计算器[5] -- 除法器

2020-04-03 15:40 作者:nyasyamorina  | 我要投稿


如果还没看过乘法器的, 推荐去看一下乘法器以便回想一下小学学了什么

回想起小学算特别长的除法时, 会把除数乘1~9的结果写在一盘, 再逐条与当前算到的数字比较, 然后.....嘛, 大家记得除法怎么算就行了

简单看一下, 可以看到除法其实就是在重复 "比较, 减法, 取出被除数下一位" 这个操作, 那么就像其他部件一样可以做一个实现单一操作的部件, 拼在一起就是得到除法器了

我们先来看看每一步操作的输入和输出需要什么

首先输出必定要有商的其中一位, 由于二进制只有0和1, 所以商的其中一位就是1bit, 其次就是输出做完减法后剩下的数字, 这串数字将会输入进下一个部件, 那么部件的输入就有上一个部件做完减法的数字, 并且还需要从被除数里拿出下一位, 由于二进制只有01, 那么需要比较的数字也只有 0*除数,1*除数, 那么输入也应当含有除数*.

弄清楚每一个步骤的输入输出后, 接下来看看里面数据如何流动

以下称从上一个部件输出的数字为A, 而从被除数拿出来的叫a, 除数*为B, 商输出的一位为c, 减法后的余数为C

首先A左移一位为a腾出位置, 得到的新数字 A_ = A<<1 + a,   然后跟着A_与除数比较, 如果A_比除数大, 则商输出c=1, 余数C = A_ - 除数*, 其中A_-除数可以写为A_+(-除数)

*由于除数总是与减法一起计算, 所以在除法开始前需要预先计算(0-除数), 得到的数字再作为后续操作的输入

如果不熟悉正数与负数的转换, 可以去参考之前的加减法器

由加法器的原理简单可知 (溢出整形, 还记得吗),  (A_永远小于2*除数, 这部分自己思考一下吧)当计算A_+(-除数)的时候, 如果A_>=除数时, 溢出位为1, 否则为0,  而这个就可以作为我们判断的标准

稍微整理一下思路就得到了实现除法里一步的部件

就像小学除法一样, 拿被除数也是从高位开始拿, 输出商也是从高位开始输出, 当被除数(int)用完后, 剩下的C输出就是除法的余数

就如同大部分部件一样, 除法器可以把重复出现的部分"折叠"起来, 使得体积更小, 但运行速度减慢


一般计算器里的部件原理都不太复杂, 静下心来稍微想想就会懂的了

但是下一篇的BIN转BCD就可能不是了

如何在mc里打造一个计算器[5] -- 除法器的评论 (共 条)

分享到微博请遵守国家法律