电子产品形形色色,除了电脑,手机,身边的很多东西带控制的电饭锅,路由器甚至小小一个U盘都带有一个完整的计算机结构包括处理器和内存。这个基本的结构在生活处处存在,今天就简要的给大家讲讲。

5f022376987322cf77a196bd39372ede.png

从底层开始讲,现代处理器或者各种芯片都是由集成电路组成,通俗的理解就是很小的电路。但是再小他也是电路,只要学过初中物理知道导线电压啥的就能理解,用电压高低表示0和1,一根电线表示一位,通过复杂到与非门控制电路等等就可以制造出一个庞大的cpu,这部分内容建议学习数字电路了解,当然偏软件的也不用了解这么细,笔者曾看过八位加法器的实现,不得不说精妙绝伦。

57a7617eee87a2e8c7887d1b7ac6cb8c.png

现代cpu背面针脚

经过一名能工巧匠的打造,由于cpu本身还是电路,当然输入还是几根电线的高低电压信号了,我们抽象为一串01数字比如“010101000100111101”,cpu会再他的另一组导线外输出另一串01串。当然01串的内容都是人为预先设定好有意义的。不管是主存,硬盘甚至键盘鼠标显示器,数据交流都是通过这些高低电压的导线来的,比如想要在显示器的某某点画一个像素,就需要向显示器的寄存器或者缓存区写入某个数据。总之cpu本质上就是一块东西一直从一边一组导线里读电流组成的数据再处理后从另一组导线里输出出来,但是这些数据都是有意义的。

好啦现在我们想象拿到一个别人制作好的cpu,这个cpu上有一组导线与内存相连,另外还有一些导线。这个cpu一般出场会设定好,从哪里开始取指令然后执行然后一直下去。一般现代PC里的cpu会从主板上一块rom存储区里开始读。这里面的程序就是那个BIOS。

现在讲下人们是怎么规定01010这些数据的意义的。引入一个概念叫指令,如何理解就是字面意思。一个时间点输入cpu的一串01信号(从代码区来的)就是一条指令,包含一个动词加后面零个或几个宾语。动词是cpu生产完就规定的,比如我们规定010110这代表加指令(将后面的宾语中第二个当地址取其值加前面那个地址上的值然后放到前面那个地址所指的地方)宾语就是两个数,根据动词不同可以理解为不同含义比如地址比如数据本身,但是本质上就是二进制的数据。

就是这一条条指令反复读取执行才让电脑工作了起来,除了普通的加减乘除或者布尔运算等指令,存数据,读数据,还有分支指令,跳转指令(高级语言的循环功能都是跳转指令完成的,跳转到之前执行过的地方,而我们人类习惯用循环来描述,所以高级编程语言如c语言的一大工作就是把cpu能执行的指令或者说汇编质量和符合人类习惯的语法相互转化)。

汇编是01指令的注记符仅此而已,所以简单的汇编器做的工作就是把诸如ADD等东西替换为cpu手册规定是01串。

典型的c语言编译有五个过程,其中第一步预处理只是一些对代码本身的处理比如按照约定替换某些东西而已。后面是编译,也就是吧高级语言翻译成汇编语言,然后就是汇编语言变成计算机能识别的二进制数据,最后一步连接相当于打包也不是很重要。

这样基本上就算最简化的计算机运行原理了。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐