当前位置:网站首页>程序的执行
程序的执行
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.关于数据段和正文段的内容,会在模块四进程和线程部分继续讲解。
边栏推荐
- [introduction to information retrieval] Chapter 1 Boolean retrieval
- SSM personnel management system
- Mmdetection installation problem
- 传统目标检测笔记1__ Viola Jones
- [paper introduction] r-drop: regulated dropout for neural networks
- Cognitive science popularization of middle-aged people
- 腾讯机试题
- @Transational踩坑
- ABM论文翻译
- Practice and thinking of offline data warehouse and Bi development
猜你喜欢
生成模型与判别模型的区别与理解
離線數倉和bi開發的實踐和思考
一份Slide两张表格带你快速了解目标检测
[introduction to information retrieval] Chapter 7 scoring calculation in search system
【MEDICAL】Attend to Medical Ontologies: Content Selection for Clinical Abstractive Summarization
Record of problems in the construction process of IOD and detectron2
Faster-ILOD、maskrcnn_benchmark训练coco数据集及问题汇总
使用MAME32K进行联机游戏
[introduction to information retrieval] Chapter 1 Boolean retrieval
深度学习分类优化实战
随机推荐
机器学习理论学习:感知机
[introduction to information retrieval] Chapter 1 Boolean retrieval
Message queue fnd in Oracle EBS_ msg_ pub、fnd_ Application of message in pl/sql
中年人的认知科普
ModuleNotFoundError: No module named ‘pytest‘
【MEDICAL】Attend to Medical Ontologies: Content Selection for Clinical Abstractive Summarization
[tricks] whiteningbert: an easy unsupervised sentence embedding approach
Two dimensional array de duplication in PHP
view的绘制机制(一)
@Transitional step pit
Oracle EBS DataGuard setup
架构设计三原则
MySQL composite index with or without ID
Interpretation of ernie1.0 and ernie2.0 papers
parser.parse_args 布尔值类型将False解析为True
Get the uppercase initials of Chinese Pinyin in PHP
常见的机器学习相关评价指标
Analysis of MapReduce and yarn principles
【信息检索导论】第六章 词项权重及向量空间模型
SSM personnel management system