对于CPU怎么知道代码呢?沮丧的以及一些关于2进制后面加个0是什么的话题,很多人都想了解,就让小编带各位来了解一下吧!
首先,让我们从半导体的故事开始。什么是半导体?半导体实际上是介于导体和绝缘体之间的东西,例如二极管。
电流可以从端子A流向端子C,但不能从相反方向流向。您可以将其视为防止电流反向流动的装置。
如果C端为10V,A端为0V,则可以认为二极管开路。
当C端为0V,A端为10V时,二极管可视为导体,导致电流从A端持续流向C端,最终结果是A端=C端=10V。
不是约定C端为0V,A端为10V吗?如何确定端子A=端子C=10V?你可以把它理解为初始状态,最终稳定下来时,端子A=端子C=10V。
抱歉,人文学科的孩子们,我不知道怎么你们高中物理老师。不管怎样,如果你不明白,只要记住在这种情况下它和电线是一样的。
使用半导体,您可以创建有趣的电路,例如[与门]。
此时,如果A、B端子之一为0V,则Y端子直接连接到0V点,Y端子也变为0V。AB两端必须都是10V,这样Y和AB之间就没有电流流过,Y两端也变成10V。
这种装置称为“与门”,有电压的地方计算为1,电压为0的地方计算为0。具体电压并不重要。
也就是说,AB必须同时输入1,输出端Y就变为1,如果AB之一为0,则输出端Y就变为0。
另外还有【或门】、【非门】、【异或门】,类似,或门的意思是如果其中一个输入为1,则输出为1,如果输入00,则为0输入。
很容易理解,非门有输入1和输出0,输入0和输出1。
异或门有点难理解,不过就是这样,输入01或10则输出1,输入00或11则输出0。
所有这些类型的门都可以用二极管制作,但我不会具体向您展示如何制作它们。有兴趣的孩子可以自己尝试一下。由于每次画二极管也很烦人,所以我将门电路简化为以下符号
然后您可以使用门电路来创建CPU。当然,制造CPU还是相当困难的。让我们从简单的事情开始加法器。
顾名思义,加法器是用于执行加法的电路,最简单的如下所示。
AB只能输入0或1。也就是说,该加法器可以计算0+0、1+0或1+1。
输出端S为结果,C表示是否有进位,为二进制数1+1=10。此时C=1,S=0
辛苦了半天,计算1+1是不是感觉特别有成就感?
如果我们再进一步计算1+2,我们就会发现一个新题。第二位必须处理第一位可能的进位,因此必须设计全加器。
每次都这么画太麻烦了,我们简化一下吧。
也就是说,有三个输入,两个输出,输入要相加的两个数以及前一位的四舍五入后,输入结果以及是否四舍五入。
然后我们将这些全加器连接在一起。
有4位加法器,可以算15+15,也就是4位加法,都达到了幼儿园、中班水平,是不是真的很厉害呢?
创建加法器后,让我们创建一个乘法器。当然,任意小数相乘有点麻烦,所以我们先创建一个乘以2的小数。
乘以2非常简单。对于二进制数,通过在末尾添加零来乘以2。是的
5=101
10=1010
因此,我们只需将输入向前移动一位,然后通过在最低位上添加0来将其乘以2。我不会画详细的逻辑电路图。你只需要知道发生了什么。
如果我们乘以3会怎样?这很简单。再去一次吧如果我们乘以5呢?首先是两个位移,然后是一个位移。CPU性能过高,GC频繁发生如何排查?这篇文章告诉你。
因此,简单的CPU中一般不存在乘法,而在软件中通过代换和加法的组合来实现乘法。还有很长的路要走。让我们继续我们的CPU工作。
现在假设我们有一个8位加法器和一个1位移位模块。综合起来,我们可以计算如下
X2
好的!几乎和小学生一样兴奋。然后计算
AX2+B
羊毛?这很简单。只需更改加法器模块和位移模块之间的接线即可。这可以通过首先将输入A通过位移模块,然后将其更改为加法器来完成。
什么?你说什么?更改程序是否意味着我必须重新连接?
所以你怎么看?编程只是来回连接电线。
是不是很神奇呢?意外与否?早期的计算机被编程为在几分钟内完成,但需要几天的时间才能连接。而且由于接线工作需要细致、耐心的工作,所以当时的程序员都是穿着制服的漂亮女孩,就像图中一样。你是否觉得自己生错了时间?
和漂亮女人在一起很有趣,但交往可能会很累。所以我们需要改进CPU,使其能够根据指令进行加或乘2。
这里再介绍两个模块,一个叫触发器,简称FF,我觉得中文叫触发器。
该模块的功能是存储1bit数据。例如,在上面的RS类型FF中,R是Reset,输入1将其清除。S为Set,如果输入1,则保存1。输入RS为0将始终输出您刚刚保存的内容。
FF用于存储计算中的中间数据,虽然1位绝对不够,但是通过并联使用4或8就可以存储4或8位数据。我们称之为寄存器。
另一种是MUX,中文称为选择器。
这很简单。如果sel输入0,则输出i0的数据。无论i0是什么,它都会打印任何内容,包括01。同样,如果sel输入1,则输出i1中的数据。当然,选择器可以做得很长,例如具有4个输入和1个输出。
具体原理我就不详细解释了,但其实看逻辑图就知道有这个存在,就可以理解。这使我们能够设计加法器和倍频器模块的使能引脚。
在此启用引脚上输入1将启用该模块,而输入0将禁用该模块。这样我们就可以控制数据是流向加法器还是流向位移模块。
所以我们首先为CPU设计了8个输入引脚,4位指令和4位数据。我们设计了三个附加指南。
0100,数据读入寄存器。
0001,将数据添加到寄存器并将结果存储到寄存器中。
如果为0010,则寄存器数据左移一位。
这样设计的原因是,正如我刚才提到的,你可以为每个模块设计激活引脚。命令输入的第二、第三和第四引脚可分别用于连接寄存器、加法器和移位器的使能引脚。这样,当输入0100命令时,寄存器输入将被激活,其他模块将为0而不被激活,数据将被存储在寄存器中。同样,当输入0001指令时,加法器开始工作,可以进行加法运算。
这是对这个题的第一个小题的简短回。
那么为什么CPU能够理解这两个级别的数字呢?
为什么CPU能理解呢?这是因为CPU内部的连线是这样连接的。我们输入一个二进制数,作为一个开关,激活CPU上的几个指定模块,并改变这些模块的连接方式,最后得到结果。
您可能会被到一些题
一个CPU可以有几千个小模块,一条32位/64位指令可以控制那么多模块吗?
A示例CPU只有3个模块,所以我直接连接它们。实际的CPU有一个解码器,可以将指令转换成所需的格式。
举个例子,如果你在你提到的简单CPU上输入命令0011,会发生什么?
当然,同时激活加法器和移位器会导致不可预测的结果。简而言之,您要对后果负责,因为您使用了并非设计的指令。
细心的朋友可能会发现题所在你设计的指令。
【0001、向寄存器添加数据并将结果存入寄存器】
你不能一次性完成这一切吗?最终还是有一个回复的过程,其实也是如此。我们设计的简易CPU,执行一条指令大致涉及三个步骤读指令、执行指令、写寄存器。
传统RISC设计分为五个步骤读指令IF、译码指令ID、执行指令EX、操作存储器MEM、写寄存器WB。我们常用的x86CPU上的一些指令可以分为近20步。
大家可能知道有一个这样的开关,当你按下开关时,CPU就移动一步,按下的越快,CPU移动的速度就越快。什么?听说你有个好主意?亲爱的,你的想法很危险。我们先不讨论它是否有独角兽手臂。你能按那么快的按钮吗?
即使你能按那么快,速度会更快,但功耗会明显增加,热量会增加,稳定性也会下降。世界上其实有这种叫超频的玩法,不过不建议新手尝试。
那么CPU如何知道它去了哪里呢?前面不是介绍过FF了吗,它既可以用来存储中间数据,也可以用来存储中间状态,无论它们走到哪里。
具体设计涉及利用有限状态机理论、FSM和FF来实现。这部分也很重要,是考试必看的部分,但与主题关联不大,这里就不详细说了。
我们继续刚才说的。现在有三个指令我们来计算X2+3。
01000001,店铺1
00010100;将寄存器中的数字加4。
00100000;乘以2
00010011,已添加3个
好吧,有了这台电脑,我们就能打败所有幼儿园的孩子,称霸大班了。而且现在我用的是4位CPU,但是如果我换成8位CPU,我就能打败低年级的学生了!其实用程序来控制CPU是一个非常先进的想法,但在此之前,计算机的CPU是单独设计的。
1969年,日本BUSICOM公司想要开发一款程控计算器,而设计CPU的美国公司也觉得每次都重新设计CPU是愚蠢的,于是双方和解,发布了计算器。4004,一款突破性产品,于1970年成为世界上第一台计算器和第一台微处理器。
这种架构改变了世界,负责设计CPU的美国公司逐渐成为业界巨头。哦,顺便说一下,它的名字叫英特尔。是的,是巴兹。让我们总结一下我们刚刚运行的程序。
01000001000101000010000000010011
将其输入CPU中,我将从馆开始为幼儿园课程做好准备。什么?一切完成后,孩子们能用手指头数数吗?机器语言不可能那么反人类。哦,我忘了这种只由01组成的语言叫做机器语言,它是CPU唯一能理解的语言。但如果让人读机器语言,它肯定会在一秒钟内变成代码,这是任何人都无法容忍的。
最后小编想说的是我是一名Python开发工程师。
最新Python系统学习教程集合集。
如果您想了解这些信息,请关注私信小编“01”,希望对您有所帮助。
正在学习或者想学习Python的朋友可以私信小编“01”领取资料!
原文链接
No Comment