简单聊聊C语言执行步骤前面写的那篇关于了解

到最后我们的程序成功编译之后我们通常都是把HEX文件下载到单片机中运行,那hex文件又是怎么回事呢?总之懂得单片机底层原理对我们理解程序执行还是很重要的,当然这也是编译原理的基础。

我之前写的理解单片机底层逻辑的文章涉及“深奥”的汇编语言,所以读的人不多。 我想明白的朋友就更少了。 最后剩下的两个问题还没写。 今天我就来解决一下。 我们刚学C语言的时候,老师肯定讲过C语言的执行过程:预处理——编译——汇编——链接。 就这四个步骤,你说简单,那就很简单; 如果你说复杂,你可以写一本书。 庆幸的是,已经有前辈写出了关于这部分内容的经典巨著。 所以今天我在这里再次推荐阅读。 这本书叫《龙书》,又叫《编译原理》。 对于程序员,尤其是计算机科学专业的研究生来说,这本书值得一读。 我写的永远不会比书上写的更详细、更具体,所以我今天简单说一下,用一张图来说明今天的一切:

简单聊聊C语言执行步骤前面写的那篇关于了解

C语言程序执行流程图

简单聊聊C语言执行步骤前面写的那篇关于了解

英文原版图片

上图已经清楚地说明了C语言转换为汇编语言的方法和汇编语言转换为机器语言的方法,所以问题可以算是结束了。

是不是更雾了?

我已经看到图片了,问题之间的关系也已经解释清楚了,但是你还更困惑吗? 事实上,任何C语言编译器都可以帮助我们理解这个过程。 因为只要你编译C语言,无论你使用的是VC6.0、VS、GCC,甚至是Keil,图中都必须有这些工具。

因为我们这里讲的是单片机,所以我们以keil为例来解释一下。 首先我们来一张照片:

简单聊聊C语言执行步骤前面写的那篇关于了解

C语言到汇编

我们编译的程序编译软件会自动生成相应的文件。 就连这个生成的文件中的机器码都已经给了我们,每个C语言代码对应的汇编指令都是一一对应的。 所以通过这个文件我们可以清楚的知道C语言和汇编语言的对应关系,以及汇编语言和机器语言的对应关系。 通过分析这个文件,我们可以更好的理解单片机的执行过程,也有助于我们进一步理解汇编语言。 最后,当我们的程序编译成功后,我们通常会将HEX文件下载到单片机中并运行。 那么十六进制文件会发生什么呢?

HEX文件解释

这里的hex文件就是我们程序编译出来的目标文件。 它存储了一些按照一定规则组合而成的机器码。 就像原来的机器码存储在纸上一样,hex文件也相当于机器码的存储介质。 当我们将文件下载到单片机时,下载软件会对其进行解析并最终存储。 机器代码被加载到微控制器的闪存中。 当然,HEX文件的规则不止一种,但是我们一般使用的规则是来自Intel的,其他的规则你可以自己学习。 以下是基于Intel的hex文件规则的解释。

十六进制内容描述的示例:

简单聊聊C语言执行步骤前面写的那篇关于了解

十六进制示例

说明:冒号是每行数据的起始符号; 蓝色代表这一行的数据长度,十六进制,比如0E就是14; 红色为存储数据的地址,如0003; 粉色代表数据类型,00代表数据记录,01代表文件结束,02代表扩展段地址记录,03代表起始段地址记录,04代表扩展线性地址记录,05代表起始线性地址记录; 后面是N位数据,长度由蓝色表示的长度bit决定; 天蓝色是校验位。

简单聊聊C语言执行步骤前面写的那篇关于了解

常规十六进制

对比一下这张图的内容和之前keil软件生成的文件图,有没有找到描述信息呢?

我想通过今天的内容大家应该对单片机代码执行流程有了一定的了解了吧? 如果还是不明白,就多调试一下代码吧。 调试得越多,自然就会越理解。 另外,我们还可以通过机器码推导汇编程序,然后编译出C语言代码。 现在你了解黑客破解软件的原理了吗? 您了解程序加密的重要性吗? 你了解抄芯片的人的工作内容吗? 那么你现在明白了吗? 总之,了解单片机的底层原理对于我们理解程序执行还是非常重要的。 当然,这也是编译原理的基础。

单片机

单片机晶振不起振的原因分析及解决方案

2024-4-28 23:02:31

单片机

AT8989SS5252单片机程序存储器的性能说明书

2024-4-29 0:06:04

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索