当前位置:网站首页>程序的执行
程序的执行
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.关于数据段和正文段的内容,会在模块四进程和线程部分继续讲解。
边栏推荐
- Classloader and parental delegation mechanism
- 一份Slide两张表格带你快速了解目标检测
- 常见的机器学习相关评价指标
- Tencent machine test questions
- Record of problems in the construction process of IOD and detectron2
- Alpha Beta Pruning in Adversarial Search
- ABM论文翻译
- [medical] participants to medical ontologies: Content Selection for Clinical Abstract Summarization
- 【论文介绍】R-Drop: Regularized Dropout for Neural Networks
- view的绘制机制(二)
猜你喜欢
Two table Association of pyspark in idea2020 (field names are the same)
ERNIE1.0 与 ERNIE2.0 论文解读
【信息检索导论】第一章 布尔检索
sparksql数据倾斜那些事儿
Message queue fnd in Oracle EBS_ msg_ pub、fnd_ Application of message in pl/sql
@Transational踩坑
【Ranking】Pre-trained Language Model based Ranking in Baidu Search
【MEDICAL】Attend to Medical Ontologies: Content Selection for Clinical Abstractive Summarization
DNS attack details
[paper introduction] r-drop: regulated dropout for neural networks
随机推荐
Module not found: Error: Can't resolve './$$_ gendir/app/app. module. ngfactory'
基于pytorch的YOLOv5单张图片检测实现
Module not found: Error: Can't resolve './$$_gendir/app/app.module.ngfactory'
Spark SQL task performance optimization (basic)
Record of problems in the construction process of IOD and detectron2
Using compose to realize visible scrollbar
Mmdetection installation problem
@Transational踩坑
第一个快应用(quickapp)demo
One field in thinkphp5 corresponds to multiple fuzzy queries
Data warehouse model fact table model design
[introduction to information retrieval] Chapter 1 Boolean retrieval
PointNet原理证明与理解
Oracle segment advisor, how to deal with row link row migration, reduce high water level
TCP attack
MySQL has no collation factor of order by
【Ranking】Pre-trained Language Model based Ranking in Baidu Search
Use matlab to realize: chord cut method, dichotomy, CG method, find zero point and solve equation
常见的机器学习相关评价指标
SSM student achievement information management system