cpu怎么执行进程(搞懂程序在CPU的执行过程)

首页教程更新时间:2023-05-14 10:48:27

高级程序语言和低级程序语言要想在CPU上执行,需要编译成机器码,因此搞懂程序语言在CPU的执行过程其实就是搞懂机器码在CPU的执行过程。

什么是机器码,我在一篇 的文章里做了介绍,这里不再阐述,有兴趣的同学可以阅读下那篇文章,下面的章节整体采用ARM CPU进行阐述,其他CPU如Inter,AMD过程比较类似。

一.CPU的组成结构

先来了解下CPU的大致结构,如下图

cpu怎么执行进程,搞懂程序在CPU的执行过程(1)

CPU结构图

如上图所示用到了寄存器,控制单元,ALU,MPLX等,下面介绍下CPU的各个组件的功能。

内存地址寄存器(MAR)

保存了当前正在读或者正在写的内存地址

内存数据缓冲寄存器(MBR)

保存了当前刚从内存读出的数据或者准备要写入内存的数据

程序计数器(PC)

保存了下一条要执行的指令的内存地址

指令寄存器(IR)

保存了当前正在执行的指令

通用寄存器

寄存器r1-r8,存储临时的数据例如中间结果)

条件寄存器(CCR)

存储加减法过程中产生的各类标识,比如Z,N,C,V

Z表示当前运算结果为0

N表示当前运算结果为负数

C表示当前运算过程中产生过进位

V表示当前运算结果中产生了溢出

cpu怎么执行进程,搞懂程序在CPU的执行过程(2)

ZNCY例子

逻辑运算单元(ALU)

根据P,Q(MBR),Q(立即数)中存储的值,进行一元或者二元运算,例如加法,减法,逻辑(ADD),逻辑(OR),逻辑(NOT),逻辑异或(XOR)等,并输出运算结果。

控制单元(CU)

解释执行指令寄存器的指令,它利用时钟脉冲信号和操作码生成控制计算机总线,存储器,寄存器等的信号,驱使数据在各个线路进行流动。

多路选择器(MPLX)

多路选择器用来控制写入程序计数器(PC)或者内存地址寄存器(MAR)的数据,根据输入数据,条件码,进行判断,计算出新的地址值后送入达到PC或者MAR

二.机器指令执行过程

CPU执行机器指令分为3个阶段即取指,解码,执行

我们叙述机器码如何在CPU上执行,可以写一段简单的代码,通过这一段代码来解释整个执行过程,复杂的代码原理也是类似,只不过是反反复复地执行相同的操作罢了,下面为一段简单C语言代码

pos1: int x = 3; int y = 4; int z = x y; z = z - 7; if (z == 0) goto pos2 z=x 2 pos2: .............. ..............'

代码总体意思是x 和 y 相加 减去7,然后判断z的值,如果等于0,则跳转到pos2代码处,否则就继续往下执行

将该代码翻译成ARM CPU 机器码后,列出以下核心的代码

pos1: ADD r1,[r2],[r3] #将r2,r3寄存器中内存地址对应的数据相加传输给寄存器r1 SUBS r1,r1,#7 #将r1寄存器的内容即(z=x y)减去7,再存储回r1 BEQ 2013 #如果上一条指令的执行结果为0,则跳转到2013这个地址即pos2 ADD r1,[r2],#2 #将r2寄存器的内容加上2(x 2),再存储回r1寄存器 pos2: ADD r4,[r5],[r6] #将r5,r6寄存器中内存地址对应的数据相加传输给寄存器r4

该机器码在内存中的分布图如下所示

内存地址

存储内容

备注

1001

3

x

1005

4

y

1009

0

z

1013

ADD r1,[r2],[r3]

z=x y

1017

SUBS r1,r1,#7

z=z-7

1021

BEQ 2013

if(z==0)

goto pos3

1025

ADD r1,r2,#2

z=x 2

..................

..........................................................

2001

1

m

2005

2

n

2009

0

h

2013

ADD r4,[r5],[r6]

h=m 2

首先操作系统将程序和数据加载到内存中,将程序的第一条指令的内存地址,写入到程序计数器(PC),然后CPU就开始不断地执行取值->解码-执行三个操作,直到程序结束。

上述程序,程序计数器存储的第一条指令地址为:1013

2.1 取指

取指的意思就是从内存中获取指令,写入到指令寄存器中,执行过程如下(红色箭头部分)

cpu怎么执行进程,搞懂程序在CPU的执行过程(3)

a.首先从程序计数器(PC)获取指令地址,写入达到内存地址寄存器(MAR)

b.将程序计数器(PC) 4(按照32位系统,一个内存地址占4个字节),从而指向下一个要执行的指令地址。

c.一个时钟周期到来后,根据内存地址寄存器(MAR)中的地址从内存中获取指令,读出指令后存储到内存数据缓冲寄存器(MBR)

d.从内存数据缓冲寄存器(MBR)将指令写入指令寄存器(IR)

2.2 解码

解码过程由控制单元(CU)处理,解码过程比较复杂,不同的指令(操作码不同)解码过程不太一样,我们讲述常用的3类解码方式即操作数地址解码,立即数解码,分支地址解码

控制单元可以根据指令类型和操作数区分出当前的解码类型,下面表格为内存中的指令和数据。

内存地址

存储内容

备注

1001

3

x

1005

4

y

1009

0

z

1013

ADD r1,[r2],[r3]

z=x y

1017

SUBS r1,r1,#7

z=z-7

1021

BEQ 2013

1025

ADD r1,r2,#2

z=x 2

..................

..........................................................

2001

1

m

2005

2

n

2009

0

h

2013

ADD r4,[r5],[r6]

h=m 2

经过第一次取指后,当前各个寄存器中的值如下

寄存器类型

当前值

程序计数器(PC)

1017

内存地址寄存器(MAR)

1013

内存数据缓冲寄存器(MBR)

ADD r1,[r2],[r3]

指令寄存器(IR)

ADD r1,[r2],[r3]

r1

0

r2

1001

r3

1005

r4

0

r5

2001

r6

2005

操作数地址解码

操作数地址解码从寄存器中获取内存地址,将内存地址指向内容取出,写回到寄存器中,以ADD r1,[r2],[r3]为例,r2,r3中存储的是操作数的内存地址,解码过程就是需要获取r2,r3内存地址对应的内容,以r2获取操作数的过程为例,r3同r2是相同的过程,如下图

cpu怎么执行进程,搞懂程序在CPU的执行过程(4)

操作数地址解码过程

a.首先将操作数指向的内存地址写入到内存地址寄存器(MAR)

b.一个时钟周期到来后,根据内存地址寄存器(MAR)中的地址,读取数据后,存储到内存数据缓冲寄存器(MBR)

c.将内存数据缓冲寄存器的内容(MBR)写回到通用寄存器r2

ADD r1,[r2],[r3]解码后,当前各个寄存器的值如下

寄存器类型

当前值

程序计数器(PC)

1017

内存地址寄存器(MAR)

1005

内存数据缓冲寄存器(MBR)

4

指令寄存器(IR)

ADD r1,[r2],[r3]

r1

0

r2

3

r3

4

r4

0

r5

2001

r6

2005

立即数解码

立即数解码不需要访问内容,它直接可以连接到算数逻辑单元(ALU),从而将立即数写入到ALU(Q(立即数)端口),如指令SUBS r1,r1,#7的解码过程就是将立即数7送到ALU,如下图所示

cpu怎么执行进程,搞懂程序在CPU的执行过程(5)

立即数解码过程

立即数直接被送往了ALU(Q立即数)端口

分支地址解码

分支地址解码的过程是将条件码和操作数(跳转的地址)送往多路选择器的过程,如BEQ 2013 指令,将操作数内存地址2013和条件码送入到多路选择器中,如下图所示

cpu怎么执行进程,搞懂程序在CPU的执行过程(6)

分支地址解码过程

2.3 执行

每个指令解码后,相当于把指令执行需要的数据都准备好了,执行过程就交给运算逻辑单元(ALU)和多路选择器(MPLX)进行处理。

运算逻辑单元(ALU)负责根据准备好的操作数进行运算,将结果进行输出,或者输出到寄存器作为临时结果,或者输出到内存中,以ADD r1,[r2],[r3]为例,它的执行过程将解码后的的操作数,也就是就是将r2和r3寄存器的值,输入到运算逻辑单元的P和Q(MBR)端口,然后通过f(P,Q)执行相加逻辑,输出到寄存器r1中,如下图所示:

cpu怎么执行进程,搞懂程序在CPU的执行过程(7)

运算逻辑单元执行过程

多路选择器负责根据条件码和跳转地址,在其内部进行判断,或者继续顺序执行下一条指令,或者跳转到指定的地址,以BEQ 2013为例,它将根据条件码中Z标识是不是为0,进行判断,如果为0,则跳转到2013,程序计数器的内容就变为了2013,否则继续执行下一条指令,如下图所示

cpu怎么执行进程,搞懂程序在CPU的执行过程(8)

多路选择器执行过程

二.番外篇

上文中已经将运算结果写入到了寄存器,那么怎样写回内存呢,以ARM CPU 为例,通过STR 指令

STR r1, [r2] 该指令将r1寄存器的内容写回到r2指向的内存中(r2是个寄存器,里面的内容是内存地址),如下图

cpu怎么执行进程,搞懂程序在CPU的执行过程(9)

STR指令执行图

a.r2寄存器中的地址写入到内存地址寄存器(MAR)

b.寄存器的数据写入到内存数据缓冲寄存器(MBR)

c.内存数据缓冲寄存器(MBR)写会到内存。

,
图文教程
相关文章
热门专题
推荐软件
奇热小说
奇热小说
下载
QQ2019手机版
QQ2019手机版
下载
王者荣耀
王者荣耀
下载
百度浏览器迷你版
百度浏览器迷你版
下载
2345浏览器手机版
2345浏览器手机版
下载
网易邮箱
网易邮箱
下载
爱奇艺
爱奇艺
下载
网易云音乐
网易云音乐
下载
WPSOffice
WPSOffice
下载
优酷
优酷
下载
谷歌浏览器(Chrome)
谷歌浏览器(Chrome)
下载
迅雷看看播放器
迅雷看看播放器
下载
UC浏览器
UC浏览器
下载
QQ音乐
QQ音乐
下载
阿里旺旺买家版v9.12.10C官方版
阿里旺旺买家版v9.12.10C官方版
下载
360安全卫士v12.1官方版
360安全卫士v12.1官方版
下载
猜你喜欢
脑游戏和棘手难题
脑游戏和棘手难题
下载
拯救蔬菜园红包版
拯救蔬菜园红包版
下载
Hi租房苹果版
Hi租房苹果版
下载
天神传奇之决战沙城
天神传奇之决战沙城
下载
雷电超时空战机TV版v1.4
雷电超时空战机TV版v1.4
下载
超级社保卡app
超级社保卡app
下载
萌宠猎人百度版
萌宠猎人百度版
下载
张大仙语音包
张大仙语音包
下载
小美女梦幻婚礼iPhone版
小美女梦幻婚礼iPhone版
下载
蚁趣通
蚁趣通
下载
海风短视频
海风短视频
下载
甜点物语糖与香料
甜点物语糖与香料
下载
kbdcr.dll
kbdcr.dll
下载
广东省围棋协会
广东省围棋协会
下载
聚智办公
聚智办公
下载
淘京多
淘京多
下载