手写操作系统(2)——代码是怎么运行的?(上):https://developer.aliyun.com/article/1508450
加减乘除四则运算
有了以上的逻辑运算门电路,我们来不如考虑如何做加减乘除?为方便回忆,现在把我们已有的门电路工具组再次拿出来!
加法器
首先咱们得明白,计算机中所有的运算其实都是基于二进制(进制的转换之后再讲)的,也就是加法器的输入和输出只有“0”和“1”。
值得注意的是设计逻辑电路时最好的方法是先写真值表,对于一个简单的加法器而言有两个输入(A/B)和一个输出(S)和一个进位(C)。
**简单分析一下,**输入两个1,输出当前位0,进位为1;输入两个0,当前位为0,进位为0;输入一个0一个1,输出当前位0,进位为0。
A | B | S | C |
0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
只看当前位,去看看门电路工具组是不是有点眼熟?异或门!
只看进位,去看看与门是不是有点眼熟!
也就是说加法器可以由异或门和与门构成!如下图所示:
但是现在这个只能称为“半加器”,最多只能计算1+1,如何更进一步,比如1+2,2+2?
这就需要在原本的加法器增加一个进位接口,如下就是“全加器”:
Copy一个百度图片来简化一下上图的结构:
将两个加法器串联在一起,就得到一个可以进行2位(3+3)加法的加法器。
要几位加法就用几个加法器串联,如四位(15+15):
注:上图展示的是串行进位加法器,又称波纹加法器。还有一种超前进位加法器,不再是从右到左一次计算,比前者更快。
参考: https://wenku.baidu.com/view/9de55e1ce53a580217fcfe93.html
减法器
减法器其实是本质还是通过加法器实现的,比如15-15,其实就是15+(-15),这里的-15是所谓的补码,后面再说。
乘法器
加减解决了,乘法怎么弄?
先看看二进制的乘法是怎么计算的,如下:
上图是4位的乘法,先考虑2位的乘法,例如a2a1×b2b1:
为什么输出有四位?因为二位乘法最大就是四位结果!比如11(二进制)乘11(二进制),结果是多少?1001!
结合上图的乘法过程,我们可以利用与门以及加法器来组成乘法器,如下图所示:
乘1?原值。
乘2?由于是二进制,在末尾加0即可。
乘3?先加0,在做一次加法可行。
乘4?加两个0。
…
除法器
除法器的设计就比较麻烦了,这里不进行展开,有兴趣的同学可以参考以下链接:
乘法器除法器的制作——百度文库
https://wenku.baidu.com/view/b30ce26ab84ae45c3b358c25.html
…ok!以上一通分析之后我们得到了加减乘除四则运算的器件了,我们接下来可以进行更高难度的计算了。
比如:
A×B+C
这就需要先保存A×B的结果,在与C相加,等等…保存?话说在计算机内部是用什么方式保存数据的呢?
寄存器
这就得讲讲寄存器的相关知识。
由于保存数据的重要性,科学家一直在思考在电路中使用何种方式可以保存数据,比如使某个器件一直输出高电平,那不就是“1”了吗?一直输入低电平,那不就是“0”了吗?而且还要可以自由切换“0”和“1”。
经过一阵鼓捣,科学家们发明了锁存器这个东西,它有什么用?它可以根据输入信号来改变输出状态。
锁存器是具有记忆功能(也就是存储功能)的基本单元,最简单的锁存器可以存储一位二进制信息。
它有两个特点:
- 有两个能稳定保持的状态,分别用来表示逻辑0和逻辑1;
- 在适当的输入信号下,可以从一种状态变为另一种状态(0-1或1-0);
最简单的S-R锁存器它是由两个“或非”门电路或者“与非”门电路构造出来的:
R、S是锁存器的输入端,前者一般被称为复位(Reset)端,后者为置位(Set)端,Q和Q加一杠是互为相反的输出(你0我1,你1我0)。
注意到这个电路跟之前我们看到的都不一样了,其门电路的输出会作为自身的输入,这种结构被称为反馈电路。
手写操作系统(2)——代码是怎么运行的?(下):https://developer.aliyun.com/article/1508460