带着问题学习(程序与CPU)
- 程序是什么?
- 程序由什么组成?
- 什么是机器语言?
- 运行中的程序存储在什么位置?
- 什么是内存地址?
- 程序的解释和运行的计算机部件叫什么?
CPU是什么?
中央处理器(Central Processing Unit,CPU)是一块超大规模的集成电路,是一台计算机的运算核心和控制核心。它的功能主要是解释计算机指令以及处理计算机软件中的数据。
中央处理器主要包括运算器(算术逻辑运算单元,ALU,Arithmetic Logic Unit)和高速缓冲寄存器(Cache)及实现它们之间联系的数据(Data)、控制及状态的总线(Bus)。它与内部存储器(Memory)和输入输出(I/O)设备合称为电子计算机三大核心部件。
参考于百度百科
参考于搜狗百科
CPU主要包括以下几大组成部分:
- 寄存器:用来存储数据(相当于CPU中的内存);
- 控制器:用来控制寄存器的读取、写出等操作;
- 运算器:是一个逻辑运算单元(辅助单元),协助控制器和寄存器达到运算的效果;
- 时钟:用来表示CPU的运算,处理数据的速度。
而对于我们程序员来说,最关心也是最需要记住的是寄存器,因为寄存器对于我们软件工程师来说,它是唯一一个能够接触到的东西,而其它的,比如控制器、运算器以及时钟都是我们软件工程师所接触不到的。所以寄存器也是我们需要深入了解的一个东西,并且一个CPU中有很多个寄存器。
程序与CPU
image.png这里我们需要先了解两个概念,高级语言和低级语言。
高级语言:简单来说,就是人类能够看懂的语言,包括C/C++、Java、Python等编程语言。
参考于搜狗百科
低级语言:CPU能够看得懂的语言,也就是机器语言(接近于汇编语言)。
参考于搜狗百科
感兴趣的朋友可以参考《Intel白皮书》,里面讲述了Intel CPU所有的汇编指令。
CPU中主要的寄存器
我们可以把寄存器当成CPU中的内存,那么为什么要这样做呢?原因很简单,寄存器的读写速度比内存条中的读取速度快很多,几十倍甚至上百倍。
- 累加寄存器:用于存储计算之后的数据;
- 标志寄存器:记录CPU中的一些状态,帮助我们程序员做逻辑判断;
- 程序计数器:存储了下一条指令在内存中的地址;
- 基址寄存器:记录当前整个数据内存开始位置;
- 变址寄存器:存储基址寄存器中的相对偏移位置,基址寄存器+变址寄存器就能得到某一个具体的内存地址;
- 通用寄存器:什么地方都能够被使用(想怎么使用就怎么使用),也是我们程序员平时使用最多的寄存器;
- 指令寄存器:CPU内部使用的(不对外开发),我们程序员是没有办法来操作它的,主要是用来存储当前的指令;
- 栈寄存器:与基址寄存器,主要是用来记录栈的起始位置。
程序计数器
当程序是顺序执行的时候,程序计数器基本上没有什么作用。然而,基本上没有任何一个程序是顺序执行的,否则这个程序就没什么意义了。尤其是程序中使用了较多的if else、switch case、while、for等语句,使得程序的逻辑变得较为复杂,从而也导致了程序的非顺序执行,此时程序计数器的作用就体现出来了。
在执行分支语句时,程序计数器和标志寄存器共同决定程序运行的下一条指令。
标志寄存器
标志寄存器是一个32bit的数,它的每一个bit标志一种状态,其中有一个bit是标志是否为0。比如判断3是否等于3,它首先会去取3-3的结果,如果3-3等于0,那么这个bit就为1,如果不等于0,那么这个bit就为0。还有其它很多bit所代表的意义,我们这里就不一一解释了。
一条跳转语句,包括了一下三个步骤:
1.计算结果;
2.标志寄存器进行置位;
3.根据标志位来相应的改写程序计数器中的值从而达到跳转的效果。
网友评论