首页 电脑数码

在程序员眼里CPU应该是什么样的?

时间:2024-03-07 19:20:14  作者:技术小企鹅

CPU是什么东西?

我们先来说CPU的全称是什么,英文名字 Central Processing Unit(中央处理器 )的缩写,相当于计算机的大脑,它是数百万甚至数亿的晶体管构成的,这是大家都知道的计算机常识,但是作为我们计算机技术爱好者或者是程序员来说,只知道这些就太少了。我今天想带大家了解的是关于CPU是如何运行的,里面都有一些什么功能。

CPU原理图

首先我们看一下这张图,图中还是很详细地给我们画出了程序执行的过程。刚刚我们也提到了我们的CPU是由很多的晶体管组成的电子部件,我们的内存也是,通常称为IC(Integrated Circuit),我们从CPU的原理图中来看,构造还是比较简单的对吧,有存储单元(寄存器)、运算单元(运算器)、控制单元(控制器),各个部分相互配合信号和数据在各个部分流通就可以完成我们所有的计算机操作,接下来我们看看我们每一个部分的工作都是做一些什么。

寄存器:可以用来暂存指令,数据等一些需要CPU处理的对象,你可以看作是内存的一种但是寄存器读写速度比内存要快很多,为了提高我们的效率根据不同的需要有些CPU内部会有20~100个寄存器。

控制器:负责把内存上的指令,数据读入到寄存器,并且根据指令执行的结果来控制整个计算机的行为。

运算器:运算器负责运算从内存读入寄存器的数据。

在这里我还要补充一个原理图中没有的模块,那就是CPU的时钟模块,我们的时钟模块负责发出CPU开始计时的时钟信号,这里我们要做到如果时钟信号 Pentium 2GHz 那它代表的意思就是时钟信号的频率为2GHz(1GHz=10亿次/秒)你可以理解时钟信号频率越高CPU运行速度越快。不过有的计算机时钟位于CPU的外部,所以我们刚刚的原理图里面没看见这个模块。

程序跑起来的流程

现在大家看完这些是不是觉得很神秘的CPU也是比较简单的构造,他可以做的我们都可以做,但是有一点他的计算能力不是我们凡人可以拥有的。程序运行以后,根据时钟信号,控制器会从内存中读取指令和数据,通过这些指令介意解释和运行,运算器就会对数据进行运算,然后我们的运算结果由控制器控制计算机做出相应的动作。

深入探讨

接下来我们就要很专业地去深入了解一些东西了,如果下面的比较枯燥无味你建议你到此为止,了解一下基本就OK了,但是你想更深入的探讨那就来吧。

我们讲到我们CPU是由寄存器,运算器,控制器,时钟信号组成的,其实我们需要深入地了解的是我们的寄存器,为什么呢?这是因为我们的程序是把寄存器作为对象来描述的。

我们在使用高级语言进行代码编译的时候在编译的时候都会转化为机器语言,然后通过CPU的内部寄存器来处理,比如我们写这样一条代码:A=1+2;这样的高级语言代码在转化成机器语言后就是利用寄存器来进行相加运算和存储处理的。

刚刚也提到过在外面CPU中有很多的寄存器,功能和数量都是不一样的,但是我们还是可以将寄存器大致划分成八类:

对于我们程序员CPU是什么呢?CPU是由各种功能的寄存器集合体,其中程序计数器,累加器、标志寄存器、指令寄存器和栈寄存器都只有一个,其他的寄存器是可以有多个的。

程序计数器

这里我们挑其中一个来细说一下工作原理,我们的程序计数器决定我们我们程序的流程,我们举一个简单的函数调用机制来说明一下程序的执行流程,

我们C语言程序程序代码中定义了两个变量a=123 b=456 然后把它做为参数传递到啊函数MyFunc()里面。从内存地址中我们发现当程序运行到地址0132的时候接下来应该执行函数体,我们函数体入口的地址在0260,这时候我们通过跳转指令把程序极速器的值设定为0260就可以实现函数的调用。我们把a、B的数据从地址0132传递到0260可以利用内存或者寄存器来实现。

我们需要知道的是当程序调用完函数后,我们需要在函数的出口0354地址处把程序计数器的值改成原来的0154,这样才会回到原来的下一条指令。但是其实我们根本没办法完成这样的操作。那我们怎么办?我们可以通过call指令和return 指令来解决。我们来看看两种指令的原理:

在编译高级编程语言的程序后,函数调用的处理会转换成call指令。函数结束处理时候就会转换成return指令,这样一来我们程序就可以运行起来了。

总结

分享到这里感觉后半部分的知识点还是比较生涩,可能没很好地理解,但是还是坚持写完了,要敢于迈出第一步,可能第一次写不明白那就第二次,同样如果你第一次看不明白那就看第二次总会有一天忽然开朗熟记于心。我们需要保持一份对技术的热爱。

相关文章