5

代码的底层执行过程

 3 years ago
source link: https://segmentfault.com/a/1190000040553576
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

计算机的基本构成

image.png
一个主机主要由CPU主存构成,主存也就是我们通常所说的内存。而我们通常所说的硬盘叫辅存。CPU主要与主存进行数据交互。

image.png
主存由存储体存储地址寄存器(Memory Address Register, 简称MAR),存储数据寄存器(Memory Data Register,简称MDR)构成。
存储体,顾名思义,主存的主要功能就是存储,存储体就是存储数据的地方。
MAR和MDR可以举一个例子来理解。把主存比作一个快递点,存储体就是货架,每个货架的每一层都对应一个编号,货架上放着包裹(数据),你想要取包裹就需要有取件码(数据地址),你把取件码告诉店员(把数据地址传入MAR),店员告诉快递小哥取件码,快递小哥通过取件码找到包裹并放到柜台上等你取走(主存根据MAR的地址获取对应地址上的数据并放入MDR)。所以说货架就队形存储体,MAR就对应店员,MDR就对应柜台。
image.png
CPU把想要获取数据的时候,就会将数据的地址传入MAR,主存通过MAR里的地址到对应位置获取数据并放入MDR中,CPU就可以取走想要的数据。这是取数据的过程。
不同于快递点的是,我们还可以通过CPU往里写数据,CPU将想要把数据想要写入的地址放入MAR中,并把想要写入的数据放入MDR中,主存就会往存储体写入地址,当然,写和读都还有分别的信号控制写数据还是读数据,我们在这里不做展开。
image.png
存储体由一一个个存储单元构成,每一个存储单元存储着一串二进制数,每一串二进制数都一应一个地址。

CPU由运算器控制器构成

运算器负责实现算入运算(加减乘除)和逻辑运算(与或非)。
image.png
运算器由算数逻辑单元ALU与ACC,MQ,X(寄存器,在这里先把他们理解为存储运算数和结果的地方),
ALU负责运算。

image.png

CU:控制单元,分析指令,给出控制信号
IR:指令寄存器,存放当前执行的指令
PC:程序计数器,存放下一条指令地址,自动加1.

代码执行过程

int a = 2, b = 3, c = 1, y = 0;
void main() {
    y = a * b + c;
}

通过上述代码执行过程,让我们看看CPU与主存是如何协调工作的。
首先代码编译成汇编语言,汇编语言再变成机器码存储在主存中。
image.png
上边存储的为指令,下面存储的为数据。指令分为操作码和地址码,操作码代表指令的标识,地址码代表指令操作的地址。
下面我们来看看执行指令的具体步骤。
image.png
第一个指令
image.png
第二个指令
image.png
第三个指令
image.png
第四个指令
image.png
第五个指令,停机。

计算机组成原理概括来讲就是讲了这些内容,具体的细节分散在了以后每个章节的学习中,包括如何进行算术运算和逻辑运算,如何主存与CPU数据如何交互,指令如何设计,CPU如何工作。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK