运算离不开逻辑运算 , 也就是门电路 , 常见的逻辑运算有与、或、非、异或、同或 。它们的真值表与逻辑符号如下 。

文章插图
逻辑电路表四、加法器然后我们就可以用门电路来做 CPU了 。当然做 CPU 还是挺难的 , 我们先从简单的开始:加法器 。
对于一个简单的加法器而言有两个输入(A/B)和一个输出(Sum)和一个进位(C) 。
输入 A输入 B输出 Sum进位 C 0000011010101101 只看输入 A、B 和 输出 Sum , 发现是异或门!
只看输入 A、B 和 进位 C , 发现是与门!
也就是说加法器可以由异或门和与门构成!如下图所示:

文章插图
半加器到这里 , 我们已经做出了一个最简单的 CPU , 但是现在这个只能称为“半加器” , 最多只能计算 1+1 , 如何更进一步 , 比如 1+2, 2+2?
这就需要在原本的加法器增加一个进位接口 , 如下就是“全加器”:

文章插图
全加器两个半加器电路可以实现一个全加器 。
前一个半加器将用于将 A、B 相加以产生部分和 。
后一个半加器用于将 CIN 与前一个半加器产生的和相加 , 以获得最终的 S 输出 。
任何半加器逻辑产生进位 , 就会有一个输出进位 。因此 , COUT 将是半加器进位输出 。
每次都这么画实在太麻烦了 , 我们简化一下

文章插图
全加器将两个加法器串联在一起 , 就得到一个可以进行 2 位数(例如 3 + 2)的加法器 。

文章插图
2bit 加法器进行 A + B 计算 , 例如 3 + 2 的和 , 3 的二进制是 11 (A1A0) , 2 的二进制是 10 (B1B0) ,
先算 A0 + B0 , 输出 C1 = 0 , S0 = 1 , 再计算 A1 + B1 + C1 , 输出 S1 = 0 , C2 = 1 , 最终的结果由C2、S1、S0 拼成 1012 = 5 。
要几位加法就用几个加法器串联 , 如四位(15+15):

文章插图
4bit 加法器现在我们就有了一个 4 位加法器 , 已经达到了小学 2 年级的水平 , 是不是特别给力?
五、减法器减法器其实是本质还是通过加法器实现的 , 比如 5 - 3 , 其实就是 5 + (-3) 。
十进制原码反码补码 50000 01010000 01010000 0101-31000 00111111 11001111 1101 先将十进制转为补码 , 再将补码输入全加器 , 这样就做到了减法计算 。
六、乘法器【计算机是怎么认识代码的】做完加法器我们再做个乘法器吧 , 当然乘任意10进制数是有点麻烦的 , 我们先做个乘2的吧 。
乘2就很简单了 , 对于一个2进制数数我们在后面加个 0 就算是乘 2 了 , 比如
5 = 101(2)10 = 1010(2)所以我们只要把输入都往前移动一位 , 再在最低位上补个零就算是乘2了 。那乘 3 呢?简单 , 先位移一次(乘 2)再加一次 。乘 5 呢?先位移两次(乘 4)再加一次 。
所以一般简单的 CPU 是没有乘法的 , 而乘法则是通过位移和加算的组合来通过软件来实现的 。
现在假设我们有加法器了 , 也有一个位移1位的模块了 。把这两个模块串联起来你就能算
(A + B ) * 2 了!激动人心 , 已经差不多到了小学 3 年级水平 。那我要是想算
A * 2 + B 呢?简单 , 把加法器模块和位移模块的接线改一下就行了 , 改成 A 先过位移模块 , 再进加法器就可以了 。
改个程序还得重新接线?
所以你以为呢?编程就是把线来回插啊 。
推荐阅读
- SD卡是什么?TF卡又是什么?它们两个有什么区别
- ChatGPT 的「神功」,是如何炼成的?
- 什么是AOP,AOP能做什么?AOP的特点,Spring AOP的实现
- 什么是前端工程化?Letjs助你构建项目代码
- 什么是国密SSL证书?和普通SSL证书有什么区别?
- 为什么你创建百科总是审核不通过?
- 我们都差点被ChatGPT骗了,但这也许是好事儿
- C++的数据类型
- 浏览器的作用不只是搜索、浏览网页,它还隐藏着这些功能
- 想买一台iphone商家不支持验机?一定是心里有鬼
