计算机原理简述-处理器和汇编

  构成计算机的硬件系统通常有“五大件”组成:输入设备、输出设备、存储器、运算器和控制器。

  简单来说,对于计算机,核心的组成就是CPU。从计算机产生到现在,其核心的作用一直都是计算、计算、计算。进行各种的数据运算。

  CPU属于计算机的硬件部分,这里就涉及到了电子的东西,也就是数字电路,简单来说就是把电路给数据话。这里又区分有电,没电两种状态。这就是通常所说的高电阻、低电阻。在计算机中,把有电设为1,没电设为0。因此可以说,硬件只会识别0和1。个人猜测这大概就是二进制的由来。

  举个栗子,一个简单的CPU,对输入的数据进行++运算的一个CPU,假设它四条电路,两条作为输入,两条作为输出。则根据上文提到的有无电对应1和0,可做出以下推测,当我输入00(输入口两电路均无电)则输出01,输入01则输出10,同理输入10输出11。

  同时,1和0,可组成00 01 10 11,即可表示4种状态,当然一个CPU不可能只有4个角。通常我们说的CPU32位或者64位,说的就是这个CPU的输入范围的宽度,在CPU四周,有各种角,这一个角就叫做CPU的一位,bit。通常我们把8个一位称之为一个字节,也就是byte。

  还是上面那个例子,两个输入口,都是用来输入数据的,这个在计算机中的术语叫做Databus,数据总线。当CPU变的再为复杂点的时候,比如不仅仅是加1操作,我还想做减1操作,这时候我们需要添加一个输入口,当这个输入口为0的时候做+1操作。当输入口为1的时候做-1操作。这个输入口则是控制数据运算的,也被称为控制总线。

  细说下,总共有三个输入两个输出口,在三个输入中,又有一条控制总线,两条数据总线。我们可以设定控制总线的输入在前,数据总线的输入在后。也就是当输入000的时候,取第一位,为0则后两位表示的数字+1,为1则后两位表示的数字-1.所以当输入000的时候输出01.

  这里000,就是一条指令。包涵了需要做的操作和被操作的数据。当我想对一个数字做+1,+1,-1操作时,需要三条指令,才能完成这个运算。假设对数字1进行以上运算。需要发出以下指令 001 010 111。(真正的CPU做这样的运算时,并非需要这么多的数据总线,输出口等。寄存器的存在,可以减少很多总线数量)当输入的宽度足够大,且控制总线扩展为加减乘除的时候。此处,大家可以同情下,第一代的码农,用01写代码的乐趣,简直不要太幸灾乐祸。至于函数调用、debug等等,哈哈,我都忍不住笑了。

  一坨坨的01指令,被称之为机器指令。难得让我挂了四年的英语还有26个英文字母。倘若编码真的只用01两个数字进行的话,我绝对二话不说,立刻回家卖肉夹馍。

  所以我们需要一个中间层(请牢记间接,面相对象的爽点),从而不需要直接的去用01编码。也就是汇编语言。

  用那个时代来说,易记易用的汇编语言来写代码。然后再使用一个工具(编译器)把这些汇编代码转化成0和1,这个转化的过程,称之为编译。此时的码农开始走进幸福时光了。

  顺便简述下内存和控制器。内存存储的是需要运行的指令,内存和硬盘的交互先当不存在。这里说的是在一个简单的运算中。比如上面的例子,共有三条指令,当我们执行这三条指令的时候,通常是把三条指令直接取到内存中。然后CPU通过地址总线,发送地址给内存,内存寻址到指令。通过操作总线,发送读写操作给内存。然后CPU通过数据总线,读写对应地址中的指令。指令执行完毕后,PC计数器+1,地址改变,重复上面的操作。

  这里只是简单的描述原理。而计算机硬件真正的运行时的操作,或者说真正的计算机原理介绍的话。建议去买本大学教材入门。本文,最多当简单了解的参考。

      

原文地址:https://www.cnblogs.com/liuguanlei/p/4847640.html