众所周知,计算只能识别二进制,任何程序或软件,最终都要经过编译或解释转换成二进制才能被计算机识别。源代码,源代码就是由程序员使用各种编程语言编写的还未经编译或者解释的程序文本,编译或解释能把源代码翻译成等效的二进制代码,也就是CPU能够识别的机器语言。
编译和解释
编译和解释都是对源代码的解释处理方式,而由于他们的操作方法不同,所以会有不同的运行的效果:
编译是把源代码的每一条语句都编译成机器语言,并最终生成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,在运行时会有很好的性能;
解释器是只有在执行到对应的语句时才会将源代码一行一行的解释成机器语言,给计算机来执行,所以使用解释器来执行的语言也被称为动态语言;
hex文件
在单片机中,源代码经过编译之后生成hex文件,该文件以行为单位每行以冒号开头内容全部为16进制代码。那为啥是十六进制而不是二进制,为什么不直接生成二进制代码?
16进制代码它的每一个字节都有其特定的含义,比如数据长度、起始地址、数据类型等信息。所以在编译的时候就能检验代码是否有错误,能够在一定程度上降低错误率,为代码的传输存储带来便利,而二进制代码却没有这个功能;
并且hex代码通过程序烧写就能转换成CPU就能识别的二进制代码。
但是无论是编译或者解释,最终的结果都是二进制代码,在CPU看来,二进制代码就是一组特定的高低电平的组合;这些高低电平最终去给内存条中相应的一个个电容充电。
那么CPU如何执行二进制的代码呢?
CPU是有工程师精心设计的,我们可以把CPU看作是海量的开关组合,这个开关由三极管组成,三极管/场效应管类似继电器(一种通过线圈产生磁场、然后用磁场控制物理开关的通断与否的设备);在它一个管脚上输入/切断电压信号,另一个管脚就会出现高/低电平;
ps:继电器是一种利用电磁铁控制的开关;当向电磁铁通电时就产生磁场,而这个磁场就会吸合或者分离开关,从而实现“以微弱电流控制另一条电路的通断”这个功能。
三极管拿来当开关使用时,和这种继电器效果几乎一样。
人类的第一台万用型计算机马克一号就拥有3000多支继电器,这也是它的核心零部件,所以它也被称作为继电器,继电器在这台计算机中的作用就是开关。
现代的计算机中使用了三极管来代替继电器的原理也是一样的,CPU中有规模庞大的开关组,当给开关组输入一组特定的高低电瓶组合时,就会导致其内部出现复杂的开关动作,最终产生另一种高低电瓶的组合作为输出,输出的电平经过放大电路、模数转换电路等变换之后,就可以驱动相应的硬件动作。