控制/MCU
前面写的那篇关于了解单片机底层逻辑文章因为涉及到“深奥”汇编语言所以看的人没多少,理解了的朋友估计就更少了吧,最后剩下两个问题也一直没写,今天就做个了结吧。我们初学C语言时老师肯定讲过C语言的执行过程:预处理——编译——汇编——链接。
就这四个步骤,说简单吧,应该就是贼简单的;说复杂呢,可以写一本书,幸好已经有前辈写了关于这一部分内容的经典巨著了。所以今天又来推荐去读书的,这本书被称为龙书,叫做《编译原理》,值得编程人员去读,特别是计算机专业的研究生更值得一看了。我写的内容绝对不会比书中写得详细具体,所以今天这里就简单说吧,用一张图说明今天所有内容:
C语言程序执行流程图
英文原图
上图已经很清楚的说明了C语言转化汇编的方法以及汇编转机器语言的方法了,所以问题可算是over了。
图已看,问题关系也说明了,但更迷糊了不?其实随便一个C语言编译器都能帮我们理解这个过程。因为只要编译C语言就不得不具备图中的这些工具,不管是你用的是VC6.0,还是VS,或是GCC,甚至是Keil。
因为我们这里是讲单片机所以接下来我们就以keil为例做个说明,先上个图:
我们编译通过的程序编译器软件会自动生成对应的文件,甚至在这个生成的文件中机器代码都已经给到了我们,并且哪句C语言代码对应的汇编指令都一一对应了。所以通过这个文件我们就可以很清楚的知道C语言与汇编语言的对应关系,汇编语言与机器语言的对应关系。
通过分析这个文件就能帮我们更好的理解单片机的执行过程,也有助于我们进一步理解汇编语言。到最后我们的程序成功编译之后我们通常都是把HEX文件下载到单片机中运行,那hex文件又是怎么回事呢?
在这里hex文件就是我们程序编译出来的目标文件,它存储的是一些按一定规则组合起来的机器代码。就像最原始的机器代码是以纸为媒介存储一样,hex文件也相当于机器代码的一种存储媒介,当我们要将文件下载到单片机时,下载软件会对其进行解析,最后将其存储的机器代码装载到单片机的flash中。当然HEX文件不止一种规则,不过我们一般用到的规则都是intel公司的,其他的规则可自行了解。下面以intel公司的hex文件规则进行说明。
举例一段HEX内容说明:
:0E00030075801175902275A03375B04480FE93
:03000000020011EA
:0C001100787FE4F6D8FD7581070200033B
:00000001FF
解释:冒号为每行数据的开始符号;蓝色表示此行数据长度,十六进制,如0E就是14;红色是数据存放的地址,如0003;粉红色是表示数据类型,00表示数据记录,01表示文件结束,02表示扩展段地址记录,03表示开始段地址记录,04表示扩展线性地址记录,05表示开始线性地址记录;后面紧跟着的是N位数据,长度由蓝色的长度位决定;天蓝色为校验位。
对比这张图片内容和上一张keil软件生成的文件图片你发现了说明信息?
我想通过今天的内容你心中应该对单片机代码执行过程有一定了解了吧?如果还是不懂,就多去调试一下代码吧,调多了你自然而然就懂了。另外,通过机械代码我们也可以推导出汇编程序,进而可以编出C语言代码。到此你是否就懂了黑客破解软件的原理了?是否明白程序加密的重要性了?是否懂了那些抄芯片的人工作内容是啥了吗?所以现在是否恍然大悟了呢?总之懂得单片机底层原理对我们理解程序执行还是很重要的,当然这也是编译原理的基础。
全部0条评论
快来发表一下你的评论吧 !