欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    CPU如何计算1+1的(从1+1等于2看电脑是如何干活的).docx

    • 资源ID:1163769       资源大小:101.98KB        全文页数:12页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    CPU如何计算1+1的(从1+1等于2看电脑是如何干活的).docx

    我们知道,人类进行运算的本质是查表,并且我们存储的表是有限的。那么,计算机是怎样进行四则运算的呢,也是查表吗?肯定不是。今天,我们来说一说CPU是如何计算1+1的。现代计算机又叫电子计算机,肯定是由电路和电子元件来实现的呗。我们都知道一台计算机的核心就是处理器(CPU),它的职责就是运算。CPU是一块超大规模的集成电路,我们要想弄清楚计算机的运算机制就要了解集成电路是如何具有运算能力的;而集成电路是由大量晶体管等电子元件封装而成的,所以探究计算机的计算能力就可以从晶体管的功能入手。晶体管如何表示。和1从第一台计算机到EDVAC,这些计算机使用的都是电子管和二极管等元件,利用这些元件的开关特性实现二进制的计算。然而电子管元件有许多明显的缺点。例如,在运行时产生的热量太多,可靠性较差,运算速度不快,价格昂贵,体积庞大,这些都使计算机发展受到限制。于是,晶体管开始被用来作计算机的元件。晶体管利用电讯号来控制自身的开合,而且开关速度可以非常快,实验室中的切换速度可达IOoGHZ以上。使用了晶体管以后,电子线路的结构大大改观,进入了晶体管为代表的第二代电子计算机时代。1947年贝尔实验室的肖克利等人发明了晶体管,又叫做三极管。下图是晶体管的电路符号。需要说明的是,晶体管有很多种类型,每种类型又分为N型和P型,下面图中的电路符号就是一个N型晶体管。cQ晶体管电路有导通和截止两种状态,这两种状态就可以作为“二进制”的基础。从模电角度来说晶体管还有放大状态,但是我们此处考虑的是晶体管应用于数字电路,只要求它作为开关电路,即能够导通和截止就可以了。如上图所示,当b处电压e处电压时,晶体管中C极和e极截止;当b处电压Ve处电压时,晶体管中C极和e极导通。这只是一个简化说明,实际上从模电角度分析,导通和截止的要求是两个PN节正向偏置和反向偏置,还要考虑C极电压。但在实际的数字电路中,e极电压和C极电压一般恒定,要么由电源提供、要么接地,所以我们可以简单记为“晶体管电路的通断就是由b极电压与恒定的e极电压比较高低决定二换句话说,这个三极管的b极电压相对e极为低电平时三极管就会导通,相对e极为高电平时三极管就会截止。从这里可以看出,晶体管的导通与截止这两种状态对外可以使用b极电压的相对高低来表示,进而说明了我们可以使用高电平或者低电平状态来表示二进制。也就是说b极是一个输入量(自变量),可以作为变量存储两个数值:高电平或低电平;相应的输出值(因变量)就是电路实际的变化:导通或截止。就上面这个N型晶体管而言,高电平截止,低电平导通。假如此时,我们把高电平作为“1”,低电平作为“0”。那么b极输入1,就会导致电路截止,如果这个电路是控制计算机开关机的,那么就会把计算机关闭。这就是机器语言的原理。实际用于计算机和移动设备上的晶体管大多是MOSFET(金属一氧化物半导体场效应晶体管),它也分为N型和P型,NMoS就是指N型MOSFET,PMOS指的是P型MOSFET。注意,MOS中的栅极Gate可以类比为晶体管中的b极,由它的电压来控制整个MOS管的导通和截止状态。NMOS电路符号如下图:DrainSourcePMOS电路符号如下图:NMOS在栅极高电平的情况下导通,低电平的情况下截止。所以NMoS的高电平表示“1”,低电平表示“0";PMoS相反,即低电平为“1”,高电平为“0二到了这个时候,你应该明白“1”和“0”只是两个电信号,具体来说是两个电压值,这两个电压可以控制电路的通断。门电路一个MOS只有一个栅极,即只有一个输入;而输出只是简单的电路导通、截止功能,不能输出高低电压信号,即无法表示“1”或“0”,自然无法完成计算任务。此时就要引入门电路了。(小提示:电压、电平、电信号在本文中是一回事)门电路是数字电路中最基本的逻辑单元。它可以使输出信号与输入信号之间产生一定的逻辑关系。门电路是由若干二极管、晶体管和其它电子元件组成的,用以实现基本逻辑运算和复合逻辑运算的单元电路。这里只介绍最基础的门电路:与门、或门、非门、异或门。Ol与门与门电路是指只有在一件事情的所有条件都具备时,事情才会发生。下面是由MoS管组成的电路图。A和B作为输入,Q作为输出。例如A输入低电平、B输出高电平,那么Q就会输出低电平;转换为二进制就是A输入0、B输出1,那么Q就会输出0,对应的C语言运算表达式为0&&l=0o02或门或门电路是指只要有一个或一个以上条件满足时,事情就会发生。下面是由MOS管组成的电路图。A和B作为输入,Q作为输出。例如A输入低电平、B输入高电平,那么Q就会输出高电平;转化为二进制就是A输入0、B输出1,那么Q就会输出1,对应的C语言运算表达式为OIIl=1。03非门非门电路又叫“否”运算,也称求“反”运算,因此非门电路又称为反相器。下面是由MoS管组成的电路图。非门只有一个输入A,Q作为输出。例如A输入低电平,那么Q就会输出高电平;转换为二进制就是A输入0,那么Q就会输出1;反之A输入1,Q就会得到0,对应的C语言运算表达式为!0=1。04异或门异或门电路是判断两个输入是否相同,“异或”代表不同则结果为真。即两个输入电平不同时得到高电平,如果输入电平相同,则得到低电平。下面是由MOS管组成的电路图。A和B作为输入,Q作为输出。例如A输入低电平、B输入高电平,那么Q输出高电平;转换为二进制就是A输入O,B输出1,那么Q就会输出1,对应的C语言运算表达式为0l=lo通过这些门电路,我们可以进行布尔运算了。半加器和全加器通过门电路,我们可以进行逻辑运算,但还不能进行加法运算。要进行加法运算,还需要更复杂的电路单元:加法器(加法器有半加器和全加器)。加法器就是由各种门电路组成的复杂电路。假如我们要实现一个最简单的加法运算,计算二进制数1+1等于几。我们这时候可以使用半加器实现。半加器和全加器是算术运算电路中的基本单元,它们是完成1位二进制相加的一种组合逻辑电路;这里的1位就是我们经常说的“lbyte=8bit”里的Ibit,即如果我们想完成8位二进制的运算就需要8个全加器。半加器这种加法没有考虑低位来的进位,所以称为半加。下图就是一个半加器电路图。半加器由与门和异或门电路组成,“所在方框是异或门电路符号,“&”所在方框是与门电路符号。这里面A和B作为输入端,因为没有考虑低位来的进位,所以输入端A和B分别代表两个加数。输出端是S和CO,S是结果,CO是进位。比如,当A=l,B=O的时候,进位C0=0,S=I,即1+0=1o当A=l,B=I的时候,进位C0=l,S=O,即1+1=10。这个10就是二进制,换成十进制就是用2来表示了,即1+1=2。到了这里,你应该明白了晶体管怎么计算1+1=2了吧。然后我们利用这些,再组成全加器。下面是一个全加器电路图,同样只支持Ibit计算。Ai和Bi是两个加数,CiJ是低位进位数,Si是结果,Ci是高位进位数。如果我们将4个加法器连接到一起就可以计算4位二进制,比如计算2+3,那么4位二进制就是OolO+0011,下表就是利用加法器计算的值。和普通加法一样,从低位开始计算。加数A代表0010,B代表OOl1。位数加数Ai加数Bi低位进位Cil结果Si向高位进位Ci最低位010101100100110最高位00000结果Si:0101,就是十进制5,加法器实现了十进制运算2+3=5。现在我们可以想到,CPU的运算单元是由晶体管等各种基础电子元件构成门电路,在由多个门电路组合成各种复杂运算的电路,在控制电路的控制信号的配合下完成运算,集成的电路单元越多,运算能力就越强。附参考资料:计算机运行原理:从1+1等于2看电脑是如何干活的?人类大脑白天工作,晚上休息;电脑白天随人一起运转,到了晚上人类按下电源键,它们也开始休息。如果CPU中的电子元件有意识,那么它们觉察到自身的硬件性能一代比一代强,软件功能一代比一代复杂,它们能意识到在它们之上,有人类在指挥和操控着这一切吗?今天计算机已经可以处理很多复杂的工作了,复杂的问题我们先不考虑,先想一个最简单的问题:计算机是如何计算1+1=2的?这个问题看似简单,但通过它可以见微知著。可以说,所有计算机表面上复杂的软件运行,都是底层简单的节字叠加。通过对这个问题的剖析,我们可以了解一些底层最基础的编程基本概念,和电子计算机的运行原理。1+1,对任何一位读者来讲都很容易,但这项数学技能是人类后天通过学习而习得的,人类生来并不会计算。那么计算机的1+1计算能力是如何拥有的呢?我们可以说,是通过编程语言实现的吗?那么,什么又是编程语言呢?像C、C+、Java,C#、Python,这些都是编程语言,还有我们在微信小游戏开发中学习的JavaScriptGo语言,也是编程语言,并且Go语言还可以说是一个现代高级编程语言,相当于是互联网时代的C语言。编程语言的作用是什么?为什么人类不用自己的自然语言进行编程呢,这样程序员不是就少了一项学习任务了吗?人类语言,是人与人之间沟通的桥梁,编程语言是人与计算机之间交流的工具。计算机听不懂人类的话语至少在目前这个时代是不可以的,人类想控制计算机,想与计算机交流,就必须通过中间角色翻译。早期科学家通过拨动开关编程,后来通过纸带打孔编程,这些方式效率都极其低下。后来程序员发明了汇编语言,这已经是一个巨大的进步了,但汇编语言晦涩难懂,表意性又不强,编程效率不高。直到1972年,有个老外叫丹尼斯里奇,他在贝尔电话实验室设计出了通用的C语言,编程才算彻底走出了蛮荒时代。自C语言诞生之后,新的编程语言层出不穷,到目前为止全世界至少已经有600种编程语言。这些语言虽然复杂,但大多数并不是通用的语言,很多编程语言只是为了解决某个特定领域的具体问题而设计的,所以并不是每个语言都具备普通大众深入学习的价值。编程语言种类虽然繁多,但它们像人类的自然语言一样,有它们的共通性,往往学习了一门语言,其它语言也能触类旁通。老话说“弱水三千,只取一瓢饮”,现在我们就以JS也就是JaVaSeriPt为例,来探究一下计算机是如何计算1+1=2的?对这个问题的探索,分为以下4步。1在浏览器中进行算式实验首先,打开谷歌浏览器,右健单击页面的空白处,选择“检查”,如图1-1所示:重新加载存储为打印CJ保存网页0屏蔽元素显示网页源代码检查语音图1-1谷歌浏览器右键菜单然后,在打开的浏览器自带的开发者工具面板中,选择Console面板,如下面图1-2所示,这是一个浏览器环境下的调试面板:G¢)EMmentiConaMSaraBN(womPertonTWMmyAc<*csM>n»:XHQtop®aDefaXtl0图1-2ConSole面板除了通过右键菜单打开Console面板,还可以通过快捷键Command+Shift+D(macOS)或者Ctrl+Shift+D(Windows)打开,效果是一样的。现在,我们在Console面板内输入我们的算式:1+1然后按下回车键,不出意外的话,我们会看到浏览器输出了结果2,如图1-3所示:G(5JElementsConsoleSourcesEt°P0FilteSWregistered>1+1<2图1-31+1计算结果这个过程看起来很快,几乎是一瞬间完成的,但计算机内部其实已经经过许许多多复杂的运算操作了。纵观人类进化史,从学会使用石器,到学会结绳记数,差不多用了100万年。但自1946年第一台电子计算机ENlAC(埃尼阿克)诞生,到1990年第一个浏览器诞生,仅仅用了44年,那么,浏览器是怎么知道1+1等于2的呢?2开始与浏览器对话,浏览器并没有计算能力问题探索到这里,为了使探索过程不致太过枯燥,请允许作者将涉及的相关对象拟人化。我是这样想的,浏览器应该知道答案,因为这个结果是它告诉我的。于是我就问谷歌浏览器:“浏览器,请你告诉我,你是怎么知道1+1等于2的?”浏览器一脸懵懂啊:“我不知道啊,是V8告诉我的。”我问:“V8又是谁,是台球馆里新的台球号码吗?”浏览器说了:“不是的,V8是谷歌研发的JavaScript引擎,你发给我的JS代码,都是由它执行的。”注意:这里我们对V8做一个小小的拓展,如果不感兴趣可以略过不看。V8最早是为某种有八个气缸的V型汽车发动机而命名的,用这个名字命名谷歌浏览器的JS引擎,预示着它的性能极高。它采用C+编写,是一款开源、高性能的JaVaSCriPt和WebAssembly引擎,已被广泛用于GoOgIeChrOme(谷歌浏览器,非开源)、ChromiUm(谷歌面对开发者开源的浏览器项目)和NodeJs中。当人民使用GoolgeChrome浏览Web页面的时候,V8引擎负责处理及执行页面里的JS代码。JS引擎与浏览器宿主环境是分开独立的,V8仅提供了执行JS的能力,像DOM和其他WebAPI则由浏览器提供。开源分享精神推动了Nodejs的兴起,2009年V8开始作为Nodejs的宿主环境引擎,得益于V8卓越的性能,Nodejs一经推出就获得了爆炸性发展,很多服务器端接口程序,都开始基于NOdeJs快速编写。除了Node.js,V8还通过Electron等框架,为桌面应用程序开发提供了支持,开发桌面软件也开始像编写Web网页一样随心所欲了。于是我又去问V8引擎:"听浏览器说,计算结果是你给我的,你是怎么知道1+1等于2的呢?人类世界上最聪明的孩子降生时,都不知道1+1等于2,你是怎么知道的呢?”V8引擎双手一摊:“尊敬的人类大哥,我并不知道1+1等于几,我所有结果都是基于您的输入给出的呀?”我一听,有点懵了,“噢,是吗?那当浏览器把1+1发给你以后,你做了什么事情呢?”V8引擎说道:“我就是进行了常规的词法分析、语法分析,然后建立了语法树、符号表等”浏览器见V8在掉书袋,直接打断它了:“这些都不要说了,这些工作都是身为编译器和解释器的份内之事,大家都是这么干的,我解析HTML标签不也是这么干的吗?直接和人类大哥说,你解析完了干了什么事?”V8引擎被打断也不生气,接着说道:“解析完了,我就使用了一个叫MacroAssembler的类库”注意:这里再小小拓展一下MacroAssembler,它简写为MASM,也称作MicrosoftMacroAssembler,它是微软为x86微处理器家族编写的一套宏汇编器,算是高端汇编器的一个范本。早期它原本是由微软公司维护的一个商业套件,20世纪90年代未,从6.12版开始不再单独销售,开始免费分发。现在MASM的新版本,已经包含在了微软的开发工具VisualStudio里面了。如果不是免费分发,MASM或许还不能具备如此广泛的市场份额,谷歌应该也不会在V8引擎中使用它。说到这里,浏览器又打断V8说道:“MacroAssembler库就是缩写为MASM的C+汇编库吧?我去年在老友StrongtalkVM那里见过它,嘿嘿,要知道StrongtalkVM可是大大鼎鼎的Java虚拟机HotSpotJVM的前辈呢!Java的执行效率可是比JS快得多呢!”从这里我们可以看出来,浏览器是一个见多识广的人,要知道自1990年以来全世界的Web网页都在它上面展示,也怪不得它见识广泛。大家都不喜欢浏览器的打断,毕竟这阻碍了我们探索问题,于是我说道:“浏览器你别打岔,V8你继续讲,使用MASM干了什么事情?”V8说道:“MASM提供了很多方法,可以理解为,和JS的语法能力是一一对应的,JS代码里的语句是什么,就对应调用MASM里面的某个方法。例如1+1这句代码,对应调用了MASM的C÷+代码,它们是这样的(如下所示):”#define_masm._moveax1/在这里_是一个宏在预处理之后将被统一替换为masm./这一句是将寄存器eax设置为1_addeax1/这一句将寄存器的值加1_reteax这里返回寄存值的值注:以上仅是伪代码示例“上面这些是C+代码,在内存里生成下面这样的机器码,大概就是人类谁也看不懂的样子啦(如下所示):”B8Ol000000/moveax183COOl/addeax1听了V8的解释,感觉V8貌似又比浏览器见多识厂了。浏览器打断V8说道:“胡说!机器码都是像OloIlOOlO这种二进制格式,你这种B8、Ol>(X)、83,这些字母加数字是什么鬼?”V8说道:“你整天只跟网页打交道,哪里知道计算机的底层逻辑。像B8、01、(X)、83这些是二进制机器码的16进制表示,人类使用16进制阅读二进制更节省屏幕空间,所以很多地方都以这种格式在屏幕上呈现文本的。但我和CPU之间的交流,却是以010110010这种二进制方式进行的。”注意:这里再小小拓展一下关于CPU的知识,CPU是CentralProcessingUnit的简称,翻译成中文就是中央处理器。现代一块普遍的CPU往往都是包含了数十亿电子元件的集成电路。CPU是计算机的运算核心和控制核心,CPU的功能主要是解释计算机指令,以及处理计算机软件中的数据。从组成结构上看,CPU主要包括算术逻辑运算单元、高速缓冲存储器,及控制单元等部分。浏览器不说话了。此时CPU听到V8在谈论中提到了它的名字,于是说道:“V8,那串十六进制代码里面的moveax1是什么意思?我怎么从来没见你提起过?“V8解释道:“moveaxl是机器码注释,是给人类大哥看的,我给你看的都是二进制字节码,是OloUoOlo这种的。具体解释一下,像mov,它是诸如1010这种汇编指令的编程语言代名词。人类编写的是mov,汇编编译器译完,就是1010这种格式了。”大家看到了吧,这也就是编程语言的作用,在人类和计算机中间充当了一名翻译官。V8继续解释道:“eax是寄存器地址,第2行代码moveax1这句指令就是将寄存器的值设为K同时,它下面第6行那句代码addeax1是将寄存器里面的数值加1。add与mov不就是你的两个指令吗,CPU大哥?如果我发错了指令,你可是从来不会理我的啊!”CPU重重点了点头,“嗯”了一声,表示赞同。(至于它作为一个硅基方块,没有头和手脚,是怎么点头的,我们就不要深究了,反正在意识上它点头了。)看到了吧,原来一句简简单单的代码,要经过词法解析、语法解析、转为汇编代码,汇编代码还要再转为机器码,经过许多步骤之后,到达CPU,最终才能执行。浏览器又说道:“好啊V8,网民每天都骂网页慢,罪魁祸首原来在你这里!你将JS代码先转成汇编代码,再将汇编代码转成机器码,一件事转好几道手续,这样能不慢吗?为什么你不直接将人类大哥写的代码,转为二进制机器码呢?”浏览器貌似找到了一次反击的机会,“嘿嘿”笑了两声,喜形于色。“哈哈哈!”V8大笑道,”浏览器,你只知其二,不知其二。JS是解释型语言,如何直接编译成机器码?如果是这样,它不就和Java一样,是编译型语言了吗?”浏览器不服气,虽然JS是解释型语言,可它为什么不能先编译再执行呢?在Java版JS解释器rhino,ralnsJ中,JS脚本不就是被编译为Java字节码执行的吗?探讨已经过去半个时辰了,我感觉讨论有点偏离主题了,于是说道:“好了,书归正传。V8,浏览器给你的JS代码,你是读一行调用MASM转化一行,还是读完了整体代码之后,统一调用MASM再转化的呢?”V8回答道:”是统一转化的,但这一切都是在内存那里折腾的。我有两个助手,一个叫初级全码编译器(英文学名叫FullCodeGenerator),它将所有JS代码依次调用MASM全部在内存中走了一遍;另一个叫优化能手编译器(英文学名叫Crankshaft'kr<er)k:ftj),它针对运行多次的代码,以初级全码编译器的编译结果为基础,再作一次优化编译,目的是使代码的执行效率更高。”注意:这里对内存先做一个小小的拓展,内存(MemOry)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,还有就是存放准备与硬盘等外部存储器做交换的数据。内存是由内存芯片、电路板、金手指等很多部分组成的。注意这里的金手指,和网文小说里的金手指不是一回事。听了V8的发言,这时候一直默默无声的内存说话了:”是啊,每次都把我折腾的晕头转向。别的EXE执行文件,是先于我这里加载、后交给CPU运行,都是一次搞定的。唯有V8交给我的执行文件,连个名字都没有,执行代码忽长忽短,变化莫测。”“哼!”内存用鼻子表达了它对V8引擎的不瞒情绪。注意:这里拓展一下EXE,EXE是Windows系统下可执行文件也就是程序的后缀名,英文全名是Executableeksl1kju:tobljFileoCPU说道:“但我感觉,V8交给我的机器码和普通EXE执行文件交给我的机器码没有什么区别,在我这里,它们都是合法公民。只要指令正确,我就能给出正确的运行结果。”探讨进行到这里,我们可以看出来了,V8并不知道1+1为什么等于2,它只是将浏览器交给它的代码,在内存中编译一遍,然后交给CPU执行。V8为了执行JS更快,平白多占用了很多内存,是用“空间换时间”的手法,在计算机世界博得了“V8引擎执行JS就是快”的美名。具体为什么1+1等于2,这件事还需要再问问CPUo3拷问CPU,从CPU的视角看“加法器”于是我向CPU问道:“CPU,你说只要指令正确,你就能返回正确结果。那么V8将1+1的机器码传给你以后,你又都做了什么事情呢?”CPU说道:”报告人类大人,我什么都没有做。我做的一切,都是按照您的指令完成的,这一切都是您的智慧啊!”CPU此时态度很诚恳,并不像在拍马屁。真相只有一个,CPU是人类科学家设计出来的。CPU继续说道:“首先,当我看到moveax1这条指令的时候,我就知道这是叫我将数值1移动到寄存器eax这个地方。”内存这时候插了-嘴:“你是怎么调度指令的?又怎么知道什么指令应该如何执行的呢?”CPU答道:“我的内部有一个助理,叫指令指挥官,它负责指令的分类与调度。假设它看到的指令是010100010010,首先从前4位OlOl判断,这是一个寄存器设置指令,于是就打电话通知寄存器老头来领取数据包裹;如果看到前4位是1010,就知道这是一个加法指令,就打电话通知算术运算单元的加法器来领取任务。待加法器计算完了,它又会将运算结果发给寄存器老头保存。”这时浏览器貌似对CPU的工作原理也起了好奇之心,也插了一嘴:“不要说人话,请讲机器语言。什么寄存器、算术运算单元都是你单位的员工,指令指挥官是如何给你的单位职员分派任务的?他看到0101,是怎么知道应该吧这个任务分派给寄存器老头的?”CPU说道:“我用拟人化的指令指挥官作类比,是为了方便人类大哥理解。从计算机角度讲,比如0101这4个Bit也就是位,依次代表4个路口,每个路口有两个岔,0向左转,1向右转,这样0101一路在电路板上走下来,不就知道是哪个职员应该负责了吗?”大家看到了吧,指令分派确实简单,问题关键还在加法器上,1+1等于几其实是它算出来的。浏览器又问道:“CPU,那加法器是如何计算1+1=2的呢?”CPU说道:“这就没那么简单了。加法器并不知道1+1等于几,加法器是由半加器累加而成的,而半加器是由一个异或门加一个与门组成的。(如下面图1-4所示)就是一个半加器:”图1-4半加器注意:在这张图中,A、B是输入,S是最终结果,C是进位结果。CPU继续说道:“其中异或门的逻辑是这样的:”负负得负、正负得正、负正得正、正正得负。“如果说异或门电路有点复杂的话,那么还可以拆开看,一个异或门可以用4个与非门表示。(如下面图1-5所示)是4个非门:”图1-54个非门“综合以上这些,加法器是由半加器组成的,而半加器又是由异或门和与非门组成的,异或门又可以由与非门组成,所以,整个加法器都可以看作是由与非门组成的,而一个与非门简单电路的物理设计是怎么样的呢,大家知道吗?”注意:这里拓展一下,事实上任何一个算术逻辑。都可单独由“与非逻辑”或“或非逻辑”来实现。CPU看了看大家,继续说道:“(如下面图1-6所示)与非门是由开关设计实现的。x、y是两个开关,它的开状态相当于1,关状态相当于0。x、y相当于与非门中的a、Box、y状态全开,以及任何一个状态为开,电路都是不通的。只有当x、y状态全为关,电路才是通的。”“既然与非门,可以由开关设计组成,异或门同样也可以。异或门加一个与非门组成了半加器,多个半加器累加到一起,就组成了全加器(如下面图1-7所示):“图1-7全加器的组成“半加器是怎么组成全加器的呢?低位半加器的进位结果,恰是高位半加器的输入,多个半加器合在一起就组成了一个多位全加器。所以,我的算术运算单元的运算能力也不是无限的,能算多大数字是由我包含了多少硬件决定的。”CPU解释完了,空间一片寂静,大家都听得入神了。看到这里,相信书本前的你也明白了,CPU并不知道1+1等于2,之所以1+1能算出等于2,是人类在设计CPU的时候赋能给它的。而CPU内所有的逻辑运算,归根结底,在最底层又都是简单的开关的开合。从这点来看,计算机的鼻祖竟然是小小的开关啊。4计算机实现加减乘除,及呈现文字影像的原理这时候浏览器举手问道:“CPU,你刚才说,你的加法器是由众多开关实现的。那减法运算、乘法运算、除法运算又是怎么实现的?”CPU说道:“减法在我这里也是加法,乘法是换算为多位加法累加的,除法又可以换算为乘法,所以,你们明白了吧,所有数学上的四则运算,都可以由加法变换实现。包括文字、音频和视频信息的处理,在我这里最终也都是二进制的加减乘除,与逻辑与非。”浏览器又问道:“那这样说,在你内部,岂不是有很多很多的开关喽?”CPU说道:“是的,人类发明了一种双极型三极管,简称晶体管(如下面图1-8所示“图18各种晶体管“每个晶体管相当于一个电路开关,以我为例,我的型号是2010年出厂的酷睿i7-980X,晶体管数量不多,也就11亿多个吧。”注意:这里拓展一下晶体管,现代计算机CPU里用的是更高级、更微小的场效应管,本质上它也是一种晶体管。晶体管的发明,是20世纪中叶科学技术领域具有划时代意义的一件大事。为此,1956年诺贝尔物理学奖授予了美国的肖克利、巴丁和布拉坦,以表彰他们对半导体和晶体管效应的研究发现。听了CPU的解释,我不禁感喟,原来人类在浏览器的Console面板里简单敲了一行1+hCPU内部僻里啪啦竟然做了那么多事情。在电子计算机世界面前,人类就是上帝的存在啊,人类动动小手指头,这个世界就翻云覆雨一阵变幻。计算机并没有智能,我们从宏观上看,计算机仿佛拥有了智能一般,其实都是通过数以亿计的场效应晶体管,通过很小很小的开关电路实现的,并且这种能力也都是人类赋予它的。在人类的大脑中,也有几十亿个神经元,它们就像计算机里面的场效应晶体管一样,人类为什么拥有智能呢,或许人类根本也没有智能,在“上帝”那里一如果有“上帝”存在的话,我们的大脑也可能只是按照他老人家的设计,表现出来的一种开关状态而已。你觉得在人类之上,有更加复杂的文明存在吗?

    注意事项

    本文(CPU如何计算1+1的(从1+1等于2看电脑是如何干活的).docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开