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

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

1.生成C51的汇编源码

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

2.查看SRC汇编文件

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

3.C51中嵌入汇编

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

4.51的链接清单

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

6.扩展运用

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

关于C51与汇编的实用混合编程,布布扣,bubuko.com

时间: 2024-12-28 16:55:43

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

【转】VxWorks中高精度实时时钟的实现及C语言汇编混合编程

最近一个项目中需要在VxWorks下使用一个高精度实时时钟,要求精度为1ms,溢 出时间大于5小时.VxWorks提供系统时钟,该时钟在操作系统启动后开始计数,精度为1个tick,可以通过tickGet()获取当前计数值.因为 系统时钟默认工作频率为60Hz,则1个tick相当于16.7ms,不符号我们的精度要求.虽然可以通过sysClkRateSet(1000),把精度提高到1ms,但1kHz的系统时钟中断频率会使得CPU的开销大增.考虑到像nanoSleep()这样的应用其计时精度可以达到纳

GNU风格ARM汇编编程实战之一 <C与汇编混合编程>

一.参考资料 1. <ARM GCC内联汇编手册>:http://www.ethernut.de/en/documents/arm-inline-asm.html 2. <__asm__ __volatile__内嵌汇编用法简述>:http://www.embedu.org/Column/Column28.htm 3. <A?R?M?内?嵌?汇?编?示?例>:http://wenku.baidu.com/view/72c12e4133687e21af45a990.htm

37.C与汇编混合编程

37.C与汇编混合编程 新建light.c: 修改start.S: 修改Makefile:加light.o 最后make成功,烧写成功. 同样,我们也可以在C函数里调用我们的汇编里面的函数: 修改start.S:把light_led申明为global: 在light.c中被调用: Make编译烧写到开发板:发现灯是可以被点亮的.在C中调用汇编函数成功. 接下来的是在C中嵌入汇编代码,而不是调用: C中嵌入汇编代码: 格式: C内嵌汇编以关键字"__asm__"或者"asm&q

32位汇编第七讲,混合编程,内联汇编

32位汇编第七讲,混合编程 博客园IBinary原创 QQ:2510908331  博客连接:http://www.cnblogs.com/iBinary/ 转载请注明出处,谢谢 混合编程的概念,有时候我们会想,C语言可不可以调用汇编的函数,或者反过来调用 或者说C语言里面内部直接内联汇编去编写. 可以实现,静看怎么实现 一丶C语言调用汇编语言的函数 1.创建工程和代码 ①创建VC++控制台程序 FILE(文件) - NEW (新建) 然后我们打开源文件,一级一级展开,找到我们的main函数 那

嵌入式Linux ARM汇编(七)——C语言与ARM汇编混合编程

嵌入式Linux ARM汇编(七)--C语言与ARM汇编混合编程 在嵌入式系统开发中,目前使用的主要编程语言是C和汇编.在大规模的嵌入式软件中,例如含有OS,大部分的代码都是用C编写的,主要是因为C语言的结构比较好,便于人的理解,而且有大量的支持库.但是很多地方还是要用到汇编语言,例如开机时硬件系统的初始化,包括CPU状态的设定,中断的使能,主频的设定,以及RAM的控制参数及初始化,一些中断处理方面也可能涉及汇编.另外一个使用汇编的地方就是一些对性能非常敏感的代码块,这是不能依靠C编译器的生成代

5种语言混合编程:C++、JS、python、Lisp、汇编

/* 混合C++.JS.python.Lisp.汇编 1种语言,5种语法 */ main { //C++ vector<int> v; v.push(2); putsl(v.size()); if(v.count()==1) { putsl("abc"); } //JS var a=function(x){ return x*2; } putsl(a(3)); a={90,91}; putsl(a[1]); //python b=2 if b==2 putsl 1 puts

kermit配置/反汇编/c和汇编混合编程/计算机存储介质/GPIO编程

kermit配置 反汇编 [email protected]:~/1$ gcc hello.c  -o app [email protected]:~/1$ gcc hello.c -g -o app -g参数决定反汇编之后的文件中,还能否看到c代码 [email protected]:~/1$ objdump -dSsx app > file 两种情况下, cat file. 查看文件内容,c代码出会不一样. [email protected]:~/1$ file app app: ELF 6

【5.1送礼】国内第一部Matlab和C#.Net混合编程入门级视频教程【完全免费】

上一次写博客很久了,一直在忙彩票分析系统架构的事情,写博客真是件费神的事情,非常花时间.今天抽空发布这篇博客,是为了开源一部自己录制的视频教程-Matlab和C#.Net混合编程视频教程[入门级].下面说说这部视频教程的来由和一些事情,想获取的仔细看看,别忘了点[推荐]哦! 一.为啥要开源 1.1 视频的来源 这部视频教程是在2012年年底闲时比较多,当初也是很多朋友,网友提出这个Matlab.Net混合编程入门比较难,没有资料,所有就特意录制了一部比较简单的视频教程.并有条件的对广大网友免费开

Matlab.NET混合编程技巧之——直接调用Matlab内置函数(附源码)

原文:[原创]Matlab.NET混合编程技巧之--直接调用Matlab内置函数(附源码) 在我的上一篇文章[原创]Matlab.NET混编技巧之--找出Matlab内置函数中,已经大概的介绍了matlab内置函数在混合编程中的优点,并通过程序找出了matlab中的大部分内置函数,当然更多人关心是如何像我所说得那样,不用直接编译,就直接在C#中调用这些内置函数.本文就带你揭开这些谜团. 声明,这篇文章是需要一点点混合编程基础的,基本概念和过程要懂一点,如果能简单成功混编一个简单的计算或者绘图例子