当前位置:网站首页>程序的执行
程序的执行
2022-07-02 06:26:00 【想搞钱的小陈】
CPU执行指令时:
1、首先,CPU读取程序计数器(PC,program counter)指针指向的指令,将它导入指令寄存器(IR, Instruction Register),具体来说,完成读取指令有3个步骤:
- CPU的控制单元操作地址总线指定需要访问的内存地址。(简单理解,就是把PC指针中的值拷贝到地址总线中)。
- CPU通知内存设备准备数据。
- CPU收到内存传来的数据后,将这个数据存入指令寄存器。
完成以上3步,CPU成功读取了PC指针指向指令,存入了指令寄存器。
然而,CPU分析指令寄存器中的指令,确定指令的类型和参数。如果是计算类型的指令,那么就交给逻辑运算单元计算;如果是存储类型的指令,那么由控制单元执行。
PC指针自增,准备获取下一条指令。
比如在32位的机器上,指令是32位4个字节,需要4个内存地址存储,因此PC指针会自增4。
以a=11+15为例。
我们再 Review 下这个问题:程序员写的程序a=11+15是字符串,CPU 不能执行字符串,只能执行指令。所以这里需要用到一种特殊的程序——编译器。编译器的核心能力是翻译,它把一种程序翻译成另一种程序语言。
这里,我们需要编译器将程序员写的程序翻译成 CPU 认识的指令(指令我们认为是一种低级语言,我们平时书写的是高级语言)。
下面我们来详细阐述 a=11+15 的执行过程:
1.编译器通过分析,发现 11 和 15 是数据(代码我们会指明数据类型),因此编译好的程序启动时,会在内存中开辟出一个专门的区域存这样的常数,这个专门用来存储常数的区域,就是数据段,如下图所示:
11 被存储到了地址 0x100;
15 被存储到了地址 0x104;
2.编译器将a=11+15转换为4条指令,程序启动后,这些指令被导入了一个专门用来存储指令的区域,也就是正文段,如上图所示,这4条指令被存储到了0x200-0x20c的区域中:
0x200 位置的 load 指令将地址 0x100 中的数据 11 导入寄存器 R0;
0x204 位置的 load 指令将地址 0x104 中的数据 15 导入寄存器 R1;
0x208 位置的 add 指令将寄存器 R0 和 R1 中的值相加,存入寄存器 R2;
0x20c 位置的 store 指令将寄存器 R2 中的值存回数据区域中的 0x1108 位置。
3.具体执行的时候,PC 指针先指向 0x200 位置,然后依次执行这 4 条指令。
这里还有几个问题要说明一下:
1.变量 a 实际上是内存中的一个地址,a 是给程序员的助记符。
2.为什么 0x200 中代表加载数据到寄存器的指令是 0x8c000100,我们会在下面详细讨论。
3.不知道细心的同学是否发现,在上面的例子中,我们每次操作 4 个地址,也就是 32 位,这是因为我们在用 32 位宽的 CPU 举例。在 32 位宽的 CPU 中,指令也是 32 位的。但是数据可以小于 32 位,比如可以加和两个 8 位的字节。
4.关于数据段和正文段的内容,会在模块四进程和线程部分继续讲解。
边栏推荐
- 常见CNN网络创新点
- Huawei machine test questions-20190417
- PointNet理解(PointNet实现第4步)
- 华为机试题-20190417
- MySQL无order by的排序规则因素
- Oracle EBS ADI development steps
- 离线数仓和bi开发的实践和思考
- Transform the tree structure into array in PHP (flatten the tree structure and keep the sorting of upper and lower levels)
- CONDA creates, replicates, and shares virtual environments
- 使用MAME32K进行联机游戏
猜你喜欢

使用Matlab实现:Jacobi、Gauss-Seidel迭代

MySQL has no collation factor of order by

使用MAME32K进行联机游戏

Using compose to realize visible scrollbar

传统目标检测笔记1__ Viola Jones

Point cloud data understanding (step 3 of pointnet Implementation)

Tencent machine test questions

腾讯机试题

Using MATLAB to realize: Jacobi, Gauss Seidel iteration

中年人的认知科普
随机推荐
Implementation of purchase, sales and inventory system with ssm+mysql
Data warehouse model fact table model design
Using compose to realize visible scrollbar
【MEDICAL】Attend to Medical Ontologies: Content Selection for Clinical Abstractive Summarization
Huawei machine test questions
软件开发模式之敏捷开发(scrum)
解决万恶的open failed: ENOENT (No such file or directory)/(Operation not permitted)
Use matlab to realize: chord cut method, dichotomy, CG method, find zero point and solve equation
MySQL组合索引加不加ID
CSRF attack
Cognitive science popularization of middle-aged people
iOD及Detectron2搭建过程问题记录
【模型蒸馏】TinyBERT: Distilling BERT for Natural Language Understanding
PointNet原理证明与理解
[medical] participants to medical ontologies: Content Selection for Clinical Abstract Summarization
view的绘制机制(二)
[model distillation] tinybert: distilling Bert for natural language understanding
Message queue fnd in Oracle EBS_ msg_ pub、fnd_ Application of message in pl/sql
Open failed: enoent (no such file or directory) / (operation not permitted)
Interpretation of ernie1.0 and ernie2.0 papers

