程序是如何在 CPU 中运行的(一)

发布者:trendsetter10最新更新时间:2022-04-27 来源: eefocus关键字:程序  CPU  运行 手机看文章 扫描二维码
随时随地手机看文章

CPU 和 MCU 的区别

对于嵌入式开发来讲,我们在日常中接触到概念都是 MCU ,MCU 和 CPU 的区别也就在于 MCU 集成了片上外围器件,CPU 不带外围器件,一个简单的例子就是 MCU 在芯片内集成了 Flash 和 RAM 用来存储程序和数据,对应的在我们个人 PC 的体现就是硬盘和内存条,因此两者的区别只是在于外围器件的集成与否,最本质的工作原理两者是互通的。


CPU 的组成部分

CPU 是由许多晶体管组成的电子部件,从功能方面上来看,CPU 内部由寄存器控制器,运算器和时钟四个部分组成,他们各自的功能如下:


寄存器:可以用来暂存指令、数据等处理对象。

控制器:负责把内存上的指令读入寄存器,并根据指令的执行结果来控制整个系统。

运算器:运算器负责运算送入运算器的数据

时钟:负责发出 CPU 开始计时的时钟信号,CPU 在时钟信号的驱使下才能工作。

程序是如何被 CPU 执行的

我们在进行嵌入式软件开发的时候,常用的一种语言是 C 语言,C 语言又被称之为高级语言,我们编写的高级语言在真正的进入到 CPU 进行执行之前,还有很多个步骤需要完成,比较粗略的划分是需要经过:编译 -> 链接 -> 生成可执行文件三大步骤,比较细致地划分就是下图所示的过程:

编译链接过程

根据上述流程图我们可以知道,程序在进入 CPU 执行前,会得到一个可执行程序,而这个可执行文件内包含的就是一系列指令和数据的集合,所以说我们编写的程序本质上也就是指令 + 数据的形式,既然有了能被 CPU 所识别的指令和数据,那么编写的程序也就可以在 CPU 里运行起来了。


CPU 的工作流程

在细致的阐述 CPU 是如何工作的,我们先来看一张 CPU 的工作流程图,图片如下所示:


在这里插入图片描述

在上述所示的图片里,我们可以看到这样几个信息,在虚线框外面的指令存储器和数据存储器,在虚线框内的指令寄存器,控制单元,寄存器组,逻辑运算单元以及状态寄存器,接下来就来阐述他们各自是怎么运行的以及他们之间又是如何相互协调共同完成一个程序。


逻辑运算单元和寄存器组

先从逻辑运算单元看起,名字叫运算单元,那顾名思义,它的功能就是运算,既然是运算那么就需要操作数和指令,具体如下图所示:

逻辑运算单元

上图所示的 OP 代表的就是指令要执行的操作,从图中也可以看到逻辑运算单元的操作数是来自寄存器组,当然对于逻辑运算单元的操作数也不总是来自寄存器组,只有在进行简单的运算的时候,才会从寄存器组里取得操作数进行运算,运算之后,那就要有结果,所以逻辑运算单元会输出两个数据,一个是运算之后的结果,一个是标志位,这里的标志位代表的是两个操作数运算之后的运算结果是否得0,是否进位,是否是负数,是否溢出这几种标志。

另一方面,寄存器组除了给逻辑运算单元提供操作数之外,同时还充当存储运算结果的功能,示意图如下:

在这里插入图片描述

也就是说,寄存器组的功能除了可以给逻辑运算单元提供操作数之外,还会存储逻辑运算单元的运算结果。


逻辑运算单元和数据存储器

上述说到,在进行简单运算的时候,逻辑运算单元会从寄存器组中取得操作数,那在进行复杂运算的时候怎么办呢,这时候,数据存储器就要发挥它的作用了,示意图如下:

在这里插入图片描述

从上述图片可以看到逻辑运算单元的操作数一个是来自数据存储器,一个是来自寄存器组。在往数据存储器里取操作数的时候,需要注意的是,数据存储器并不是 CPU 的部分,那么访问存储器的速度相比于访问寄存器的速度是要慢许多的。

在阐述寄存器组的时候,我们说到寄存器组可以提供操作数,同时也能够存储逻辑运算单元的运算结果,那对于数据存储器来说,也是一样的,它也能够存储逻辑运算单元的运算结果。示意图如下:

在这里插入图片描述

那寄存器组和数据存储器都能够存储逻辑运算单元的运算结果,那两者的区别是什么呢?笔者听到的最为通俗的一个解释就是:把逻辑运算单元的运算结果存储在寄存器组中就好比我们在考试做数学填空题的时候,会得到一些中间结果,就是说这些结果并不是要填到试卷里的答案,但是是作为下一步运算的条件,那我们就先把这个结果记录到草稿纸上,这个草稿纸就相当于我们的寄存器组,当我们计算出最后的答案的时候,再将这个答案填到我们的试卷上,试卷就相当于我们这里的数据存储器。所以,用一句话来说,就是,寄存器组是用来存储中间结果的,而数据存储器是用来存储最终结果的。


控制单元

上述我们说逻辑运算单元的操作数来源可能是寄存器组可能是数据存储器,运算结果的存储位置可能是寄存器组也可能是数据存储器,那在实际程序运行的时候,到底该采用哪一种方式呢,这个时候,就需要使用到控制单元来进行协调,示意图如下:

在这里插入图片描述

从上述图片我们可以看到从控制单元往下的各个线条分别指向了各个开关,这里的空圈就代表的是一个开关节点 ,也就是说控制器将控制开关往哪里闭合,从而决定了是往寄存器还是往数据存储器里取得操作数。

在看图中控制单元上面的部分,我们可以看到数据控制单元的数据来源是指令寄存器,所以说控制单元接收的是指令,那么我们也就可以总结一下控制器具备的功能,如下:


指令解析:分析该指令需要执行什么操作

确定数据流向:确定该指令用到的操作数来源和产生结果的去向

获取指令

上述讲到控制单元的是从指令寄存器中获得指令的,那么指令寄存器的指令又从何而来呢,我们回到我们最开始给出的那张示意图:

在这里插入图片描述

从图中可以看到指令是从指令存储器中取得的,同时,我们思考程序要能够正确的运行,那么就需要使得指令有序的得到运行,而不是胡乱地送到指令寄存器中,那么 CPU 又怎么保证指令能够有序的得到运行呢,这里就需要使用到 CPU 的 PC 指针寄存器,PC 指针寄存器的功能是存放下一条待执行指令的地址,当地址被取出之后,PC 指针寄存器将更新,指向下一条即将执行的指令,因此 PC 指针寄存器的存在也就保证了指令的有序执行。


总结

上述我们把 CPU 工作涉及的部件单独拆开进行了阐述,现在我们将其整合,所以 CPU 的工作流程是根据 PC 指针寄存器存储的下一条即将执行的指令的地址,使得指令存储器中的指令能够有序的进入指令寄存器,然后,控制单元从指令寄存器中取得相应的指令,并对其进行指令解析,判断当前指令要执行的操作,以及根据指令解析的内容控制逻辑运算单元操作数的来源和逻辑运算单元运算结果的存储位置,从而完成指令要求 CPU 执行的运算。

关键字:程序  CPU  运行 引用地址:程序是如何在 CPU 中运行的(一)

上一篇:程序是如何在 CPU 中运行的(二)
下一篇:汇编语言阶段一总结

推荐阅读最新更新时间:2024-11-04 20:43

安徽省最大储能场站具备电网运行条件
2月15日,国网淮北供电公司技术人员在烈山区对淮北皖能储能科技有限公司储能场站进行技术指导。经过技术调试,淮北皖能储能科技有限公司具备电网运行条件。据了解,淮北皖能储能科技有限公司是安徽省最大的储能场站,总规划容量为100万千瓦时,目前建成10.3万/20.6 ...
[新能源]
Android之父最新声明:阿里云OS基于Android运行
    北京时间9月16日消息,今日,Android之父安迪·鲁宾(Andy Rubin)在Google+上对阿里云OS做出了最新回应。他表示,阿里云基于Android平台,如果希望受益于Android,就需要兼容Android。   以下是回应的全部内容:   嘿,约翰·斯佩里奇(John Spelich,阿里巴巴集团国际企业关系副总裁)——我们认同阿里云OS不是Android生态系统的一部分,无需和Android兼容。   然而,阿里云采用了Android的运行环境、框架和工具。而且你们的应用商店包括Android应用(还包括盗版谷歌应用)。因此阿里云基于Android平台并利用了开放手机联盟为Android平台付出的所有工作成
[手机便携]
LPC1114采集温度传感器DS18B20程序
Temperature.h文件 #ifndef _TEMPERATURE_H_ #define _TEMPERATURE_H_ #include lpc11xx.h #define DQ_H (LPC_GPIO0- DATA |= (1 2)) #define DQ_L (LPC_GPIO0- DATA &=~(1 2)) #define DQ_IN (LPC_GPIO0- DIR&=~(1 2)) #define DQ_OUT (LPC_GPIO0- DIR|=(1 2)) #define DQ_DATE ((LPC_GPIO0- DATA&0x4) 2^1) //DS18B20 ROM 命令宏定义 #def
[单片机]
OCCI程序访问SQL地理数据的一般过程研究
摘 要: 结合Wrapper Facade模式,给出OCCI程序访问Oracle Spatial的一般过程,并给出实例。   对象关系数据库管理系统(ORDBMS)是面向对象技术与传统的关系数据库相结合的产物。ORDBMS在原来关系数据库的基础上 ,增加了一些新的特性 ,这些特性对查询优化影响很大。查询处理是ORDBMS的重要组成部分 ,它的性能优劣将直接影响到DBMS的性能 。在当前众多的ORDBMS中,越来越多的GIS系统采用Oracle Spatial管理地理数据。目前访问Oracle数据库的方式有很多种,而这些方式或因为追求通用性而牺牲效率,或因为不能适应地理数据类型特点而无法实际采用。   针对上述问题,本文探讨了通
[工业控制]
OCCI<font color='red'>程序</font>访问SQL地理数据的一般过程研究
单片机C语言C51程序中的基本结构
一.顺序结构 顺序结构是最基本、最简单的结构,在这种结构中,程序由低地址到高地址依次执行,如图给出顺序结构流程图,程序先执行A操作,然后再执行B操作。 二.选择结构 选择结构可使程序根据不同的情况,选择执行不同的分支,在选择结构中,程序先都对一个条件进行判断。当条件成立,即条件语句为“真”时,执行一个分支,当条件不成立时,即条件语句为“假”时,执行另一个分支。如图:当条件S成立时,执行分支A,当条件P不成立时,执行分支B。 在C51中,实现选择结构的语句为if/else,if/else if语句。另外在C51中还支持多分支结构,多分支结构既可以通过if和else if语句嵌套实现,可用swith/case语句实现。
[单片机]
单片机C语言C51<font color='red'>程序</font>中的基本结构
矩阵键盘扫描程序实例
使用芯片STM8S003 所用端口:PD2~PD6, PA1~PA3 其中,PD3~PD6为输出,PA1~PA3 / PD2为输入(默认上拉) /* PortCom BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 PD6 PD5 PD4 PD3 PD2 PA3 PA2 PA1 */ 程序如下: span style= font-size:18px; deep= 5 /* 添加包含芯片的头文件 */ #include iostm8s103f3.h volatile unsigned char CF ; //按键触发标志(表示4列,每一
[单片机]
第71节:液晶屏的字符,16点阵,24点阵和32点阵的显示程序
开场白: 这一节要教会大家二个知识点: 第一个:如何利用任意点阵字体显示函数display_lattice来显示8x16的字符,16点阵汉字,24点阵汉字和32点阵汉字。 第二个:纠正上一节的一个小错误。C51编译器跟其它单片机的编译器有点不一样。想把常量数据保存在ROM程序存储区里并不是用const关键字,而是是用code关键字。 具体内容,请看源代码讲解。 (1)硬件平台: 基于朱兆祺51单片机学习板。 (2)实现功能:开机上电后,可以看到液晶屏分别显示32点阵,24点阵和16点阵的 馒头 两个字,还有 V5 这两个8x16点阵的字符。 (3)源代码讲解如下: #include REG52.H sbit LCD
[单片机]
滚柱导轨:数控机床高效运行的驱动力
机床制造者最关心的莫过于机床的精度,刚性和使用寿命,对导轨系统的关注甚少。但导轨为机床功能的实现奠定了可靠的基础,各种类型的机床工作部件,都是利用控制轴在指定的导轨上运动。机床设计者根据机床的类型和用途选用各种不同形式的导轨系统,用得较为广泛的就是滚柱导轨,这主要基于滚柱导轨的多个优势。 1、高精度,滚柱导轨能够提供高精度的滚动运动,确保了数控机床在加工过程中的稳定性和准确性,从而提高了加工质量和生产效率。 2、高刚性,柱导轨在承载能力上更强,更能承受较大负载,保证了数控机床在复杂工况下的稳定性和可靠性。 3、低摩擦和长寿命,通过将滑动摩擦力转变为滚动摩擦力,滚柱导轨显著降低了摩擦系数,减少了能量损失,提高了设备的灵活
[嵌入式]
滚柱导轨:数控机床高效<font color='red'>运行</font>的驱动力
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved