打印

汇编和C混合的问题

[复制链接]
2969|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文件中就可以调用了。

使用特权

评论回复
5
51yao|  楼主 | 2008-5-19 09:14 | 只看该作者

回3楼

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

使用特权

评论回复
6
xuyaqi| | 2008-5-19 10:17 | 只看该作者

.

因为c适合做大的程序结构,汇编适合做实时要求高的函数,因此c做结构主程序调用实时汇编函数比较合理。

使用特权

评论回复
7
xujunchen| | 2008-5-19 10:24 | 只看该作者

3楼的说法很好!

使用特权

评论回复
8
gyt| | 2008-5-19 12:21 | 只看该作者

为什么不是反过来?

使用特权

评论回复
9
aolin| | 2008-5-23 09:17 | 只看该作者

没那么简单啦!

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

使用特权

评论回复
10
wxj1952| | 2008-5-23 10:57 | 只看该作者

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

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

为什么不能反过来?汇编主程序开始,调用C函数。谁能举个简单的例子?

使用特权

评论回复
11
starlite_jason| | 2008-5-23 13:27 | 只看该作者

那有什么区别

你用汇编直接调用C的函数就行了,不过就是要注意函数接口(参数传递)

使用特权

评论回复
12
wxj1952| | 2008-5-23 13:41 | 只看该作者

不一样!

C主函数 main不能直接运行,前面有STAUP.A51、或者后面有INIT.a51,汇编怎么办?ORG 0H ? 在什么环境下编程?

使用特权

评论回复
13
lbx_00| | 2008-5-23 19:38 | 只看该作者

在keil里,

如果c里有函数 hh,

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

汇编就可以这样调用了:CALL  hh

使用特权

评论回复
14
lord_fan| | 2011-8-3 14:44 | 只看该作者
很期待解答。

使用特权

评论回复
15
xufucg| | 2014-5-16 16:04 | 只看该作者

单片机程序中,使用汇编程序调用C程序是常用的,但是C程序运算时,要占用单片机的寄存器.因为汇编程序的时候有些寄存器已经被赋值,而且后面还要继续用到,如果C语言计算时,占用或修改这些寄存器?(RAM地址).C语言运算返回来以后,汇编程序的继续运算,后果出错。怎样控制C语言运算占用字节的区域?或者说怎样指定“段”开始地址?

使用特权

评论回复
16
xufucg| | 2014-5-17 07:52 | 只看该作者
你用汇编直接调用C的函数就行了,C函数就是汇编的一个子程序。带着参数传递,可去可回,很好用。我现在遇到的问题是C程序运算占用的寄存器不能确定位置或范围,有时候影响汇编的数据,使用压栈方案,在不确定的C占用寄存器的位置情况下,压栈也不好操作。如果汇编调用C之前就能确定好C程序使用的寄存器开始地址就好了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

148

帖子

0

粉丝