搜索
bottom↓
回复: 31

LIB文件的调用

[复制链接]

出0入0汤圆

发表于 2013-7-6 14:20:59 | 显示全部楼层 |阅读模式
汇编语言  怎么用KEIL调用  lib文件?能实现这个功能么

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-7-6 14:35:58 | 显示全部楼层
不会汇编,只会C,帮顶

出0入0汤圆

发表于 2013-7-6 15:13:38 | 显示全部楼层
把lib 加入工程,然后包含头文件,头文件里声明了函数的,直接调用头文件里的函数即可

出0入0汤圆

 楼主| 发表于 2013-7-6 15:20:56 | 显示全部楼层
山外メ雲ジ 发表于 2013-7-6 15:13
把lib 加入工程,然后包含头文件,头文件里声明了函数的,直接调用头文件里的函数即可 ...

汇编也可以包含头文件么?怎么弄呀 ?

出0入0汤圆

发表于 2013-7-6 20:54:54 | 显示全部楼层
609178658 发表于 2013-7-6 15:20
汇编也可以包含头文件么?怎么弄呀 ?

汇编,像调用其他函数就好了

出0入0汤圆

 楼主| 发表于 2013-7-6 22:23:15 | 显示全部楼层
本帖最后由 609178658 于 2013-7-6 22:26 编辑
山外メ雲ジ 发表于 2013-7-6 20:54
汇编,像调用其他函数就好了


有那么容易么?能说具体点么,那个LIB是个库文件,好多函数都在里面,怎么调?

出0入0汤圆

发表于 2013-7-7 01:00:37 | 显示全部楼层
609178658 发表于 2013-7-6 22:23
有那么容易么?能说具体点么,那个LIB是个库文件,好多函数都在里面,怎么调? ...

汇编我不太熟悉,不过跟调用其他的.s 函数一样的,你如何在本.s文件里调用其他 .s 的函数,就等同于那样调用 lib
我记得 IAR 里面 EXPORT 声明一下外部调用函数即可调用那个函数

出0入0汤圆

 楼主| 发表于 2013-7-7 10:06:41 | 显示全部楼层
山外メ雲ジ 发表于 2013-7-7 01:00
汇编我不太熟悉,不过跟调用其他的.s 函数一样的,你如何在本.s文件里调用其他 .s 的函数,就等同于那样 ...

还真不知道 汇编可以调用外部函数,没研究过

出0入0汤圆

发表于 2013-7-7 10:19:01 | 显示全部楼层
汇编调用外部函数,还得搞定清楚外部函数对寄存器、堆栈等资源的修改情况。不然会有意想不到的情况发生

出0入0汤圆

 楼主| 发表于 2013-7-7 10:33:56 | 显示全部楼层
younge 发表于 2013-7-7 10:19
汇编调用外部函数,还得搞定清楚外部函数对寄存器、堆栈等资源的修改情况。不然会有意想不到的情况发生 ...

谢谢,您能指点一下怎么调用么?一直没有调用过

出0入0汤圆

 楼主| 发表于 2013-7-7 10:36:05 | 显示全部楼层
609178658 发表于 2013-7-7 10:33
谢谢,您能指点一下怎么调用么?一直没有调用过

您看这个程序可以调用么

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-7-7 10:44:48 来自手机 | 显示全部楼层
先用EXTERN CODE ()声明外部的函数,然后你要知道你调用的函数有没有参数,如果有参数,你要知道这几个参数分别在哪几个寄存器里,然后直接用LCALL调用即可

出0入0汤圆

 楼主| 发表于 2013-7-7 10:46:30 | 显示全部楼层
信天游 发表于 2013-7-7 10:44
先用EXTERN CODE ()声明外部的函数,然后你要知道你调用的函数有没有参数,如果有参数,你要知道这几个参数 ...


51单片机也可以么?调用LIB也可以这样么

出0入0汤圆

发表于 2013-7-7 12:51:37 来自手机 | 显示全部楼层
可以的,

出0入0汤圆

 楼主| 发表于 2013-7-7 13:27:11 | 显示全部楼层
信天游 发表于 2013-7-7 12:51
可以的,

怎么弄得 能给点提示不?

出0入0汤圆

发表于 2013-7-7 14:33:36 来自手机 | 显示全部楼层
我在KEIL c51的启动文件里试过,调用外部文件的函数就是这么做的,我也不知道在51的汇编中行不行

出0入0汤圆

发表于 2013-7-9 22:00:23 | 显示全部楼层
609178658 发表于 2013-7-7 10:33
谢谢,您能指点一下怎么调用么?一直没有调用过

我大三时候专门研究过,当时据说只有一个老师以前常用混合编程,结果我去找他,他说好几年没用了不会了

于是我接着琢磨了好久也没搞定,遂放弃……

出0入0汤圆

发表于 2013-7-9 22:06:25 | 显示全部楼层
首先要声明标号,然后要搞清楚怎么传递参数.

出0入0汤圆

发表于 2013-7-9 22:25:15 | 显示全部楼层
17楼说的有理,做过bootloader的朋友应该都会这种混合编程吧,不过本人不会,没有跟师傅学成就走了!

出0入0汤圆

 楼主| 发表于 2013-7-10 14:42:55 | 显示全部楼层
younge 发表于 2013-7-9 22:00
我大三时候专门研究过,当时据说只有一个老师以前常用混合编程,结果我去找他,他说好几年没用了不会了

...

为什么说是混合编程 C 和汇编的混编么?不是吧 LIB不分的吧

出0入0汤圆

发表于 2013-7-10 23:48:50 | 显示全部楼层
609178658 发表于 2013-7-10 14:42
为什么说是混合编程 C 和汇编的混编么?不是吧 LIB不分的吧

哦。不好意思,我可能误会你的问题了

出0入0汤圆

 楼主| 发表于 2013-7-11 17:08:31 | 显示全部楼层
山外メ雲ジ 发表于 2013-7-6 15:13
把lib 加入工程,然后包含头文件,头文件里声明了函数的,直接调用头文件里的函数即可 ...

声明函数?是不是有很多的规矩? 我弄了好久  都没弄出来

出0入0汤圆

发表于 2013-7-11 17:29:51 | 显示全部楼层
younge 发表于 2013-7-10 23:48
哦。不好意思,我可能误会你的问题了

简单看了下你打包的程序,貌似就是要C和汇编混合编程吧...
看你的.h文件里有好多的C函数声明
要想在汇编里调用的话应该就得混合编程了
基于本人也不会混合编程,所以建议朋友搜索一些bootloader的资料看下
应该可以学到混合编程。

出0入0汤圆

发表于 2013-7-11 22:11:12 | 显示全部楼层
mvpgpz 发表于 2013-7-11 17:29
简单看了下你打包的程序,貌似就是要C和汇编混合编程吧...
看你的.h文件里有好多的C函数声明
要想在汇编 ...

不是啊。反正我是没学会混合编程

出0入0汤圆

 楼主| 发表于 2013-7-11 23:08:23 | 显示全部楼层
mvpgpz 发表于 2013-7-11 17:29
简单看了下你打包的程序,貌似就是要C和汇编混合编程吧...
看你的.h文件里有好多的C函数声明
要想在汇编 ...

汇编调用LIB库需要声明,是通过,INC来声明,不是那个.H文件
不是混合编程
我现在有了新问题,就是在INC里如何声明函数

出0入0汤圆

发表于 2013-7-12 08:55:12 | 显示全部楼层
609178658 发表于 2013-7-11 23:08
汇编调用LIB库需要声明,是通过,INC来声明,不是那个.H文件
不是混合编程
我现在有了新问题,就是在INC里 ...

好吧 我表示无能为力了
问题解决了一定要贴出来让大家都学习一下额

出0入0汤圆

 楼主| 发表于 2013-7-12 09:05:15 | 显示全部楼层
mvpgpz 发表于 2013-7-12 08:55
好吧 我表示无能为力了
问题解决了一定要贴出来让大家都学习一下额

你用汇编么?现在用汇编的不多了

出0入0汤圆

发表于 2013-7-12 18:48:16 | 显示全部楼层
609178658 发表于 2013-7-12 09:05
你用汇编么?现在用汇编的不多了

刚学的时候用过几次,后来全用C了,唉!

出0入0汤圆

 楼主| 发表于 2013-7-12 20:17:58 | 显示全部楼层
mvpgpz 发表于 2013-7-12 18:48
刚学的时候用过几次,后来全用C了,唉!

是啊 过时的东西了 可是我还在用  没办法   还是C 好用

出0入0汤圆

发表于 2013-7-15 16:17:11 | 显示全部楼层
參數傳遞的規則在Keil C51 Compiler手冊中寫得很清楚, 如果你不想看,
那麼下面這個方法是最快的了.

假設你要呼叫xxx.lib中的一個Add函式, 它的宣告是這樣的:
    int Add(int a, int b);
你就寫個test.c加到Project中. 它的內容就只是:

include xxx.h
void main() {
    Add(0x1234, 0x5678);
}

在"Option for Target->Listing->Assembler Listing"這項打勾產生test.lst檔
照著它裡面呼叫的方式依樣畫葫蘆的寫就好了

出0入0汤圆

 楼主| 发表于 2013-7-16 16:07:44 | 显示全部楼层
Jach 发表于 2013-7-15 16:17
參數傳遞的規則在Keil C51 Compiler手冊中寫得很清楚, 如果你不想看,
那麼下面這個方法是最快的了.

谢谢您的解答  不过 您好像没有看清 我问的 问题  
是汇编调用LIB 文件
还有一个问题
ASM 汇编可以调用c生成的反汇编src 么
就是ASM  调用src

出0入0汤圆

发表于 2013-7-17 09:45:53 | 显示全部楼层
609178658 发表于 2013-7-16 16:07
谢谢您的解答  不过 您好像没有看清 我问的 问题  
是汇编调用LIB 文件
还有一个问题

是沒懂你的問題. "汇编调用LIB 文件", 幹嗎? 不就是為了在.asm裡呼叫LIB的函式嗎?
但是, 如果你不知道參數傳遞的規則, 就沒辦法呼叫. 我以為你的問題在這.

"ASM 汇编可以调用c生成的反汇编src 么", 這問題我就更不懂了, 還是讓別人來回答吧.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-6 16:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表