微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 关于CPU的胡言乱语

关于CPU的胡言乱语

时间:12-01 来源:互联网 点击:
CPU具体是如何工作的?

工作多年的资深程序员也未必说得清楚,即便是汇编高手也不一定能准确描述,大部分人对这些几乎没有兴趣,照样能写出优秀的程序。
作为一个学生时代就开始对电子电路发生兴趣的爱好者,模拟电路自然很好理解,也很形象,比如一个波形经过放大,变成电压更高的相同的波形,比如发光二极管加上一个正向电压就会发光......可是,一旦接触到数字电路,这些东西都排不上了用场,有种不会外语的中国人到了外国的感觉。
数字电路接触多了,大概也理解了一些皮毛,不过是输入一个高或低的电平,输出一个高或低的电平,这些规则是设计好的(程序),这些与非或门就是最原始最纯朴的CPU,而这些程序是固化的,焊接上去就那个样子的,你输入一串脉冲,它就按照规则输出一串脉冲,如此这般。
后来,接触了编程,先学了高级语言VB、VB.net,再浏览过几本C语言,瞻仰了一下汇编语言,不明觉历啊!时间长了,感觉也就那么回事,没什么深奥的,只要下功夫研究,完全可以成为一个合格的程序员,就这么感觉着突然就少了兴趣,唉,人就是这么及安!

许多年来,对数字电路到程序之间的联络,一直处于糊涂一盆的状态,苦于没有名师指点,也缺乏这方面的资料,顿时感到那些所谓讲师都是书呆子,我坚信他们可以照本宣科地把汇编指令倒背如流,却讲不明白CPU内部那些神奇的脉冲是如何跳跃的,这是我所关心的,我想也是很多人关心的。

下面,就按我的个人傻瓜式的理解描述一下我认为的CPU工作原理,太雷人,游客请止步,防止触电身亡!

先说内存,内存就像一张方格信纸,每行多个列,共有多上行都是固定的。这张方格纸被划了几个区域,分别存放不同性质的数据。内存又像一块黑板,所有的演算过程都要在黑板上进行。
举个例子,老师在黑板上讲课,学生问:“1+1=?”,老师拿起粉笔(CPU的指针),在黑板上写下了“1+1=” ,相当于在方格纸上占了4个格(事实上不是那么少,先不管它),众所周知,CPU是靠程序发出指令的,所以这时候程序员的指令必定是要求CPU进行加法运算,假设这个等号就是要求运算的指令,那么“1+1”这个算式就会被CPU编译成10010100101100010001110001......这样的二进制机器码送进CPU内部的加法器,然后输出一串011101010010011100101......之类的结果,结果放在哪里呢,自然是写在黑板上,同理,放在方格纸的指定位置(这个位置必须是闲置的,不然会将原来的格子里的数据擦除,带来不可知的后果)。于是就完成了计算的过程。
如果觉得还是难以理解,那我举个更浅显的例子。以前给火锅店修理过一台羊肉切片机,这种机器是通过调整切刀的间隙达到调整羊肉片的厚薄的,这里的羊肉就代表需要运算的数据,间隙的大小就代表逻辑算法,如果切刀间隙是固定的,那么你放进去一斤羊肉,会切出5盘肉片(老板好黑!),同理放进两斤羊肉就出出10盘肉片。这里的羊肉、肉片都是要占用空间的(内存),羊肉片端出去上桌(输出),内存的数据就完成了任务。

按照这样似是而非的逻辑,发挥我胡思乱想的特长,CPU内部世界林立着几亿个二极管,这些二极管组成了各种各样的逻辑电路,随时等待着羊肉的到来,在迅雷不及掩耳盗铃的时间内切出了一盘一盘的羊肉片,羊肉丝,羊肉块,羊肉丁......
这是最简单的一个运算,而程序往往十分复杂和冗长,CPU像一个不知疲倦的工人,时刻等着下一条指令。回到刚才方格纸那个思路上来,所有的程序代码必须在内存上进行存放才能进入CPU进行运算,运算后的结果也必须写在内存里,这就像老师不能把1+1的结果“2”放在心里一样,他必须写在黑板上。

CPU在内存这张方格纸上读取和写入数据的时候,并不像我们写文章从左到右,从上到下一个字一个字,一行一行地写,而是随时进行跳转,神经病一样,它可能走着走着突然就跳走了,然后又突然跳回来,它的节奏永远是那么齐整,他跳一百米和一米的时间是一样的,不可思议吧!

这就是我所理解的CPU底层工作的状态,不管你懂不懂,反正我是似懂非懂。至于如何将结果送到显示器,如何将鼠标键盘的数据送进来,这不属于最底层,不是今天学习的笔记。这些东西相对还是容易理解的,至少我真的略知一二。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top