从算盘到逻辑电路和算术逻辑单元

421 阅读7分钟

本人计算机科学小白,有理工科基础,课程来源是《计算机科学速成课》

B站链接:www.bilibili.com/video/BV1EW…

文章中的图部分来源视频截图,部分自绘,使用软件:画图、亿图图示(画电路图非常方便)。

封面是旧都なぎ老师的捏人ヾ(>∀<)(ノ∀`●)⊃老师的画风真是太好看了!

1 计算机早期历史

计算机改变了我们生活中的方方面面,当今的”信息时代“。

最早的计算机器:算盘:手动计算机

能够储存数据并进行简单计算

算盘的基本变种,算盘会记录数据。

历史中,人类创造过许多计时或是处理数据的机器。

计算机先驱Charles Babbage:“随着知识的增长和新工具的诞生,人工劳力会越来越少。”

计算机:缩减工作量。一开始是一种职业,后来才用来指机器。

20世纪之前,由于手工计算机造价高昂,计算繁杂,使用预先制定好的计算表查表寻值。一旦出现数字改变,表就需要改变,非常不灵活。

分析机:“通用计算机”,即自动计算机,跨时代的概念。

根据分析机的思想,激励了许多人开始有了计算机思维、编程思想。

美国人口普查中,由于移民数字庞大,每十年的人口普查无法完成预期目标,只能使用计算机来处理数据,提高效率。于是设计了一个制表机,将人的属性,例如“已婚”,在已婚处打孔,接通电平,齿轮+1,能够大大提高效率。

计算机可以提高工作效率,尤其是在反复计算和复杂计算中。

2 电子计算机

随着科技的发展,人类进程的迈步,需求计算更高复杂度的数据,人工难以实现,需要依靠计算机完成。

最大的机电计算机之一:哈佛马克一号,1944。“大脑”是继电器,通过控制继电器的开关来控制电子电路的断开与连通。但是机械臂自身有重量,难以满足速度的要求。在使用中,会发生齿轮磨损,部件损坏,故障概率增加,为了正常使用的寿命太短。

“bug”:当初在哈佛马克一号维修继电器时,曾拔出一只死虫子,称之为bug(虫子),这就是bug的来源。

继电器的替代品:热电子管

热电子管:将两个电极装在一个气密的玻璃灯泡里,真空管。其中一个电极可以加热从而发射电子,称为“热电子发射”。另一个电极会吸引电子,形成“电龙头”的电流。但是需要带正电。

改进为三级真空管:加入正电连通,加入负电阻止电子流动,可以控制线路。

计算机从机电转向电子。

巨人一号:由真空管构成。第一个可编程的电子计算机。

1950年,真空管到达了极限。

新的替代品:晶体管。

全新的计算机时代。

晶体管:有两个电极,电极间有一种材料(半导体)隔开它们,控制导电或不导电。控制晶体管的是一个“门”电极,通过改变“门”的电荷,来控制电流是否允许流动。

体积小,制作低廉,性能更好,工作寿命长,计算机开始步入普通家庭。

常用的半导体材料是“硅”,这也是硅谷的名字来源。

3 布尔逻辑和逻辑门

计算机起初是机电设备,利用十进制计数。后来使用晶体管后,计算机有了“开/关”两种状态,只使用两种也可以表达信息,叫做二进制。

只需要true和false两种状态,写作0或1。

早期计算机有三进制,甚至五进制,但是状态越多,越难区分信号,信号还容易混在一起,使得精确度下降。但是如果使用二进制,就变得便于区分。

image-20210529180536715.png

image-20210529180557611.png

数学方面有基础理论,专门处理“真”和“假”,解决了法则和运算,叫做“布尔代数”。

平常接触过的数学是有着数值的加减,但是布尔代数里变量的值是true和false,能进行逻辑操作。

布尔代数中的基本操作是:NOT, AND, OR

NOT:将布尔值反转

image-20210529180935004.png

设计电路,使得输入为ON时,电流可以流过并接地,输出就没有电流,输出为OFF。 image-20210602181830119.png image-20210602181726312.png

AND:只有两个输入都是true,输出才是true

image-20210529182502586.png

OR:只要一个是true,结果就是true

image-20210529182757186.png A或者B是ON,输出就是ON。 image-20210602182515755.png image-20210602182641819.png

门的画法

image-20210602182827256.png

image-20210602182907501.png

image-20210602182928781.png

image-20210602182956155.png

XOR:异或。与OR区别在于两个输入都为true时,输出为false

image-20210529183157161.png

image-20210602183818154.png

4 二进制

十进制是基于10

二进制是基于2,以此类推

8-BIT:8位,最多只有256种颜色。

8位作为一个单位:字节

1字节=8位,即1 bytes = 8 bits

KB:千字节,MB:百万字节,GB:十亿字节,TB:八万亿字节

二进制里,1 千字节 = 2的10次方 = 1024字节

为了表示正负,一般利用第一位,1是负,0是正,剩下31位表示数字。但是32位仍然不够用,进而有了64位。

为了方便在数亿个字节中寻找数据,标记为“位址”。

浮点数:IEEE 754,使用科学计数法来存十进制数。

32位浮点数:第一位表示正负,然后八位是存指数,后面的32位存有效数字。

计算机使用数字来表示字母,ASCII法,七位代码,足够存128个不同值。将大小写字母和符号进行表示。但这种方法仅适用于字母。

为了解决亚洲中文和日文的问题,诞生了Unicode,统一了所有编码的标准,它是16位的,对所有语言都足够。

5 算术逻辑单元

ALU:计算机里负责运算的组件

ALU有两个单元,一个算术单元和一个逻辑单元。

算术单元:负责计算机里所有数字操作。

使用逻辑门表示加法,两位输入,0+0=0,0+1=1,1+0=1,与XOR一致,但1+1=10(二进制),需要有“进位”。

可以使用AND门来解决“进位”,加到电路中,即半加器。

image-20210602173343275.png

但是半加器只能运算1+1及其以内的,往上就需要全加器。

全加器有三位输入,最大可以计算到1+1+1,组合半加器,再使用一个OR门检查进位是否为TRUE,就可以做成一个全加器。

image-20210602174403906.png

再将全加器作为一个部件,将ABC三个输入加起来,输出“总和”和“进位”

有了新组件后,可以相加两个八位数字。

制作八位加法器,使用一个半加器和七个全加器,叫做8位行波进位加法器,最后一个全加器有一个进位的输出。

image-20210602175813528.png

如果第九位,即进位是TRUE,代表两个数字和太大了,超过了八位,此时称之为:溢出

溢出:两个数字的和太大了,超过了用来表示的位数,会导致错误和不可预期的结果。

为了不溢出,需要更多的全加器,来操作16或者32位数字。但是缺点是需要很多逻辑门,而且进位需要花费一些时间。

现代计算机使用的是超前进位加法器,设定好了一些操作。但是简单的ALU没有乘法,做到乘法的方式是使用多次加法。

乘法电路比加法更复杂,需要更多逻辑门。

逻辑单元:执行逻辑操作。能做简单的数值测试,比如分辨输入数值是否为0。

8位ALU可以用一个V型图像表示。“1000”代表加法命令,“1100”代表减法命令。

可以输出FLAGS,使用零标志可以判断两个数字是否相等(A-B=0),负标志可以判断两个数字的大小(A-B为正or负),使用溢出标志可以看出数值是否溢出。