ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

程序是如何在计算机上被执行的?(下篇:cpu工作原理)

2022-04-13 22:36:11  阅读:470  来源: 互联网

标签:下篇 计算机 NAND --- 电路 寄存器 cpu


本文接上文程序是如何在计算机上被执行的?(上篇:软件部分),主要内容是机器语言如何在计算机硬件上运行,关于逻辑门,加法器,布尔运算,亦即,cpu的工作原理

 

1、逻辑门

以下图片是《三体》中的一个情节:

 

这段故事提到一千万个这样的门部件,就是搭建计算机的基础元件,逻辑门

那什么是与、或、非呢?

相信聪明的你高中物理有学过电路,想象三种场景:

1、非门开关控制灯泡,1是打开,0是关闭

图片

 

2、与门
串连电路,只要关一个开关,灯泡就不亮,只有两个开关都打开灯泡才亮,即必须都是1才亮。

 

3、或门

并联电路,只要有一个开关是开的,灯泡就亮。

道生一,一生二,二生三,三生万物,就像人体蛋白质由二十种氨基酸通过不同组合而成,使用这三种基本逻辑门,就可以实现所有逻辑运算,进而构造出一整套的计算,这时候我们认为,与、或、非就是逻辑完备的。

一切运算的基础——加法

现在能生成万物的基础元素与或非门出现了,接下来我们着手设计CPU最重要的能力:计算,以加法为例。由于CPU只认识0和1,也就是二进制,那么二进制的加法有哪些组合呢:

  • 0+0,结果为0,进位为0

  • 0+1,结果为1,进位为0 

  • 1+0,结果为1,进位为0 

  • 1+1,结果为0,进位为1,二进制嘛!

  • 图片

注意进位一列,只有当两路输入的值都是1时,进位才是1,看一下你设计的三种组合电路,这就是与门啊,有没有!

但,只有计算能力是不够的,电路需要能记得住信息。

神奇的记忆能力

到目前为止,你设计的组合电路比如加法器天生是没有办法存储信息的,它们只是简单的根据输入得出输出,但输入输出总的有个地方能够保存起来,这就是需要电路能保存信息。

电路怎么能保存信息呢?一位英国物理学家,设计了这样一个简单但极其神奇的电路:

这是两个NAND门的组合,不要紧张,NAND也是有你设计的与或非门组合而成的,所谓NAND门就是与非门,先与然后取非,比如给定输入1和0,那么与运算后为0,非运算后为1,这就是与非门,这些不重要。

比较独特的是该电路的组合方式,一个NAND门的输出是两一个NAND门的输入,该电路的组合方式会自带一种很有趣的特性,只要给S和R段输入1,那么这个电路只会有两种状态:

要么a端为1,此时B=0、A=1、b=0;

要么a端为0,此时B=1、A=0、b=1;

不会再有其他可能了,我们把a端的值作为电路的输出。

此后,你把S端置为0的话(R保持为1),那么电路的输出也就是a端永远为1,这时就可以说我们把1存到电路中了;而如果你把R段置为0的话(S保持为1),那么此时电路的输出也就是a端永远为0,此时我们可以说把0存到电路中了。

就问你神奇不神奇,电路竟然具备存储信息的能力了。现在为保存信息你需要同时设置S端和R端,但你的输入是有一个(存储一个bit位嘛),为此你对电路进行了简单的改造:

这样,当D为0时,整个电路保存的就是0,否则就是1。

同理,我们可以通过任意加法器进行组合拼接实现较长的二进制计算。实际上,数学家已经证明,加法是实现所有数学运算的基础。有了加法器,原则上就可以通过他们搭建任何其他计算,像乘法、除法、平方、开方、三角函数等。而伟大的计算机科学家图灵在一百年前就已经指明,这些简单运算足以支撑任何信息处理的过程。

寄存器与内存的诞生

现在你的电路能存储一个比特位了,想存储多个比特位还不简单,复制粘贴就可以了:

我们管这个组合电路就叫寄存器,你没有看错,我们常说的寄存器就是这个东西,类似于平常运算过程用到的可擦写草稿纸。

 

上图左侧是十六进制操作码,右边是将数据从一个寄存器复制到另一个寄存器的操作。

你不满足,还要继续搭建更加复杂的电路以存储更多信息,同时提供寻址功能,就这样内存也诞生了。

寄存器及内存都离不开上一节那个简单电路,只要通电,这个电路中就保存信息,但是断电后很显然保存的信息就丢掉了,现在你应该明白为什么内存在断电后就不能保存数据了吧。

以上就是cpu计算的原理了,如前所述,真正的计算机在运行的时候,是通过逐条读取存放在内存中的相应指令,然后进行计算和操作实现的。被机器所识别并运行的机器指令或操作指令,会被编码成方便人类理解的筑基形式,就是汇编语言

再接上一篇文章程序是如何在计算机上被执行的?(上篇:软件部分),从后往前读,就是整个程序在计算机上执行的流程了。

总结:

回顾一下,编程语言是经过如下流程在计算机上执行的:

编程语言---语法分析、词法分析---转换成汇编语言---机器指令---cpu运行---逻辑门---与或非

这样看,所有语言,不管是js,python,go还是其他的,最终都会被解析成汇编语言在cpu上执行。那么,所有语言,都是等价的,所有语言都可以通过编译器实现从一种语言到另一种语言到转换

当计算机运行程序时,我们会发现每一层表现形式不一样,但本质都是计算,而且每一层都是建立在下一层基础上的抽象。虽然分了很多层,所有层都是等价的,层和层之间有明确边界,越到下层牵涉到的基础单元越多,越到上层越简洁。

抽象对我们在计算机科学中做的每件事都很有帮助。抽象使得编写一个大型程序成为可能,将其划分为小而且容易理解的部分,用C这样的高级语言编写这样的程序不用考虑汇编,用汇编写代码不用考虑逻辑门,用逻辑门来构建处理器不用太多考虑晶体管,抽象是如此重要

不管是计算机网络分层原理,计算机系统,应用…都有抽象,都是为了让使用者更易用更好用,至此,理解了cpu,理解了语言的解析和执行、理解了分层和抽象,完。

标签:下篇,计算机,NAND,---,电路,寄存器,cpu
来源: https://www.cnblogs.com/youqiancheng/p/16142426.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有