汇编和C混合的问题

[复制链接]
4185|15
 楼主| 51yao 发表于 2008-5-18 16:46 | 显示全部楼层 |阅读模式
我使用的是51单片机,我想让汇编和C混合编程,让汇编调用C程序,该怎么办呢?之前用过将C反编译成汇编,然后再放到主汇编函数里去,但又要对生成的汇编修改,程序这样太麻烦。能不能在汇编的环境下加进去我要用到的C子程序呢?请大侠们指导一下!
 楼主| 51yao 发表于 2008-5-18 16:53 | 显示全部楼层

C编译

或者是将C编译好,然后在汇编环境里直接调用它呢?
rodger_br 发表于 2008-5-18 22:36 | 显示全部楼层

混合编程

我一般都是让编译器由C函数生成汇编框架,然后在里面填汇编。
这样省心省力
zjf0000 发表于 2008-5-19 08:51 | 显示全部楼层

一般把汇编写成一个文件

一般把汇编写成一个文件,然后把其中的函数声明export。在别的C文件中就可以调用了。
 楼主| 51yao 发表于 2008-5-19 09:14 | 显示全部楼层

回3楼

3楼: 混合编程 
我一般都是让编译器由C函数生成汇编框架,然后在里面填汇编。
这样省心省力 
 
这种我试过,有没方法在通一环境下,例如是汇编环境里,直接存在两种语言,只需加点声明之类的语句,然后实现汇编调用C呢?这样会不会更简单点啊?
xuyaqi 发表于 2008-5-19 10:17 | 显示全部楼层

.

因为c适合做大的程序结构,汇编适合做实时要求高的函数,因此c做结构主程序调用实时汇编函数比较合理。
xujunchen 发表于 2008-5-19 10:24 | 显示全部楼层

3楼的说法很好!

gyt 发表于 2008-5-19 12:21 | 显示全部楼层

为什么不是反过来?

aolin 发表于 2008-5-23 09:17 | 显示全部楼层

没那么简单啦!

让汇编调用C函数,不是不可以,但还是有很多地方要考虑,C语句并是都能生成直接对应的汇编指令的,有些是需要用到函数库才能完成的.

wxj1952 发表于 2008-5-23 10:57 | 显示全部楼层

挑战性的问题。最好举个例子。

书上一般只讲过C主程序调用汇编子程序。或者汇编子模块调用C函数。

为什么不能反过来?汇编主程序开始,调用C函数。谁能举个简单的例子?
starlite_jason 发表于 2008-5-23 13:27 | 显示全部楼层

那有什么区别

你用汇编直接调用C的函数就行了,不过就是要注意函数接口(参数传递)
wxj1952 发表于 2008-5-23 13:41 | 显示全部楼层

不一样!

C主函数 main不能直接运行,前面有STAUP.A51、或者后面有INIT.a51,汇编怎么办?ORG 0H ? 在什么环境下编程?
lbx_00 发表于 2008-5-23 19:38 | 显示全部楼层

在keil里,

如果c里有函数 hh,

在汇编文件里,声明 EXTRN(hh)

汇编就可以这样调用了:CALL  hh
lord_fan 发表于 2011-8-3 14:44 | 显示全部楼层
很期待解答。
xufucg 发表于 2014-5-16 16:04 | 显示全部楼层

单片机程序中,使用汇编程序调用C程序是常用的,但是C程序运算时,要占用单片机的寄存器.因为汇编程序的时候有些寄存器已经被赋值,而且后面还要继续用到,如果C语言计算时,占用或修改这些寄存器?(RAM地址).C语言运算返回来以后,汇编程序的继续运算,后果出错。怎样控制C语言运算占用字节的区域?或者说怎样指定“段”开始地址?
xufucg 发表于 2014-5-17 07:52 | 显示全部楼层
你用汇编直接调用C的函数就行了,C函数就是汇编的一个子程序。带着参数传递,可去可回,很好用。我现在遇到的问题是C程序运算占用的寄存器不能确定位置或范围,有时候影响汇编的数据,使用压栈方案,在不确定的C占用寄存器的位置情况下,压栈也不好操作。如果汇编调用C之前就能确定好C程序使用的寄存器开始地址就好了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

148

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部