关于C51与汇编的实用混合编程

最近研究了下51的混合编程,总结一下吧!

1.生成C51的汇编源码

右键单击项目文件,在弹出的opinion for file ....选择上生成SRC文件,这个可以产生汇编源文件,也能允许在C51中嵌入A51,即汇编代码,另外不知为何在项目中若嵌入汇编需添加keil的C51S.LIB,否则下载到单片机后无法正常运行,至于具体原因,现在还不是很明白。

wKiom1Nh6CSjdCsFAAF8iEzgMk8575.jpg

2.查看SRC汇编文件

在项目文件中可以找到SRC文件,可查看所写的C51代码翻译成汇编后的代码,截取部分如图所示,由于编译器在编译C文件时会加入较多的给汇编器的信息,比如会把函数名称加以修改,如图中的"?PR?_myfun?TEST"等,所以会比较信息杂乱,个人认为,只要能够找主要的信息即可,不必太过究其细节,如每个符号的具体含义等,因为我们一般是在C中嵌入汇编。

wKioL1Nh6o3TPcuiAAIIGF20m0A822.jpg

3.C51中嵌入汇编

如图所示,在C51中调用汇编子程序,可建立一个空函数,在内部用#pragma asm及#pragma endasm嵌入汇编程序,为更好的掌握在程序编译后的具体情况,我们可以查看SRC文件,整体观察C文件在编译成汇编后是否有问题。

wKioL1Nh6-KgCGy4AABLQH9tqlI897.jpg

4.51的链接清单

在项目文件生成M51文件是由链接器BL51.exe所生成清单文件,里面有链接的信息,截取个人认为比较重要的信息,即各模块分布情况,如图中的"?PR?_myfun?TEST"的偏移地址为002cH,当用烧录器打开hex文件,便会发现在002cH的中16进制代码,与汇编中的"?PR?_myfun?TEST"的代码16进制相同。

wKiom1Nh7gPQYXMlAAG8ZHdbgDY352.jpg

6.扩展运用

通过以上方法,我们便可以获得C文件在编译后的信息,像其他文章中所讲的混合编程,诸如参数传递约定等,其实我们完全可以去观察C文件编译后的汇编文件来获得,对于其他需要共同使用的区域,诸如全局变量等,其实我们也可以去汇编文件观察,这样一来,我们便不用去记忆那些所谓的特殊约定。

你可能感兴趣的:(单片机,混合编程)