如果我们将4个加法器连接到一起就可以计算4位二进制,比如计算2 3,那么4位二进制就是0010 0011,下表就是利用加法器计算的值。
和普通加法一样,从低位开始计算。加数A代表0010,B代表0011。
结果Si:0101,就是十进制5,加法器实现了十进制运算2 3=5。
到这里,本文的核心内容基本说完了。
回忆一下:单一的晶体管只能控制电路通断;
多个晶体管组成基本的门电路可以做到输入电信号、输出亦为电信号的基本单元,完成基本逻辑运算;
各种门电路组合成一个叫做“加法器”的单元就可以完成加法运算,此时的的这一个单元就是计算机里面说的1bit。
如果想计算8位二进制加法,如00010101 01001010就要将8个这样单元电路连接在一起,当然这需要数电方面的知识。
说句题外话,这一小节我们的主题是计算加法,这里面的加法器使用的是门电路实现的。
实际上,计算机运算部件核心就是加法器,加法器使用补码就能计算减法,左移累加就是乘法,右移累减就是除法。
除此之外,门电路可以构造出运算部件,也可以构造出具有存储功能的部件和控制电路,比如CPU的构成就是由运算器、控制器和寄存器组组成,其中寄存器就是由触发器和门电路构成的。
有了这些功能部件、存储部件、控制部件,就可以构造出一台简单的计算机模型了。
3.完成一次真正的计算通过上面的叙述,大家应该明白了01010101这一串数字无非就是高低电平信号,逻辑电路可以把这堆电信号转换成另一堆电信号,那么01010101是怎么来的,这些二进制数字又是如何转换为电信号呢?输出的电信号又以什么方式让人类能够读懂呢?
继续听我唠叨。
3.1.穿孔纸带
穿孔纸带是早期计算机的输入和输出设备,它将程序和数据转换二进制数码:带孔为1,无孔为0,经过光电扫描输入电脑。
光电扫描利用光敏电阻感光特性的自然可以做到将数字转换为电信号,比如纸带有孔的地方透光,那么光敏电阻的阻值就小,进而可以得到高电压信号,反之没有孔的地方得到低电压信号。
下面这张图是穿孔纸带转化为电信号的一种古老方式,可以让我们更容易理解电脑读取输入的方式。
这种方式是利用电流的通断来识别数据,对应着这个穿孔纸带上的每个数据孔位的上面都有着一根金属针,下面有着容器,容器装着水银。
按下压板时,卡片有孔的地方,针可以通过,与水银接触,电路接通,没孔的地方,针就被挡住。这也是一种01信号转换为电信号的方式。
下面是一张穿孔纸带照片,这是我国六七十年代还在使用的输入方式。
输入已经理解,输出就不用多说了,输出的高低电压通过机械装置可以直接打印出输出结果,比如穿孔纸带。除此之外,输出的电信号也可以连接上其它仪器、电路,如示波器等。
3.2.演练一番
在这里我们清理一下思路:
(1)提出需求:项目中需要计算一下1234567*7654321-987654
(2)十进制转化为二进制,制作穿孔纸带
(3)将穿孔纸带放入计算机,计算机读取数据
(4)计算机一边读取“01”数据,一边将“01”转换为低电压和高电压。
这里说明两点。第一点:低电压和高电压并不是一个具体固定的值。如果计算机输入电压范围为0到10V,以5V作为分界线,那么0~5V内任意电压值都是低电压,5V~10V内任意电压都是高电压。
第二点:进程的引入。计算机运算速度非常快,但是因为需要人为制作穿孔纸带、计算机读取纸带速度也很慢,所以刚开始的时候计算机两次计算之间会留下很长时间。
为了不浪费这些计算资源,科学家就引入了“进程”的概念,这样就可以一次性输入多次计算任务,开启计算机后,计算机依次执行相应进程不会有空闲时间。
(5)数据电信号(输入电平)在指令电信号的控制下在电路中进行转换,最后得到一批高低电压(输出电平)。
(6)输出,高低电压信号可以通过打印设备打印出结果。
3.3.编程语言的本质
机器语言就是高低电平不同序列的排列,我们编写的机器语言就是高低电平(0和1)不同序列的排列、不同顺序的输入,经过电脑处理后输出的也是不同序列的高低电平的排列。
只是我们通过电路转换,将这些不同序列的高低电平转换成不同旋律音高的声音或明暗色彩不同位置的图像输出,进而得到我们能够直观理解的信息。
同理,我们的高级编程语言也是这样,只不过人类可读的文本代码需要借助编译器才会生成相应的二进制代码,最后在本机上运行。
一句话,代码就是高低电平的抽象,点击运行后,代码所代表的高低电平组合就会在各种电路中运作了。