609178658 发表于 2013-7-6 14:20:59

LIB文件的调用

汇编语言怎么用KEIL调用lib文件?能实现这个功能么

07071624 发表于 2013-7-6 14:35:58

不会汇编,只会C,帮顶

山外メ雲ジ 发表于 2013-7-6 15:13:38

把lib 加入工程,然后包含头文件,头文件里声明了函数的,直接调用头文件里的函数即可

609178658 发表于 2013-7-6 15:20:56

山外メ雲ジ 发表于 2013-7-6 15:13 static/image/common/back.gif
把lib 加入工程,然后包含头文件,头文件里声明了函数的,直接调用头文件里的函数即可 ...

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

山外メ雲ジ 发表于 2013-7-6 20:54:54

609178658 发表于 2013-7-6 15:20 static/image/common/back.gif
汇编也可以包含头文件么?怎么弄呀 ?

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

609178658 发表于 2013-7-6 22:23:15

本帖最后由 609178658 于 2013-7-6 22:26 编辑

山外メ雲ジ 发表于 2013-7-6 20:54 static/image/common/back.gif
汇编,像调用其他函数就好了

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

山外メ雲ジ 发表于 2013-7-7 01:00:37

609178658 发表于 2013-7-6 22:23 static/image/common/back.gif
有那么容易么?能说具体点么,那个LIB是个库文件,好多函数都在里面,怎么调? ...

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

609178658 发表于 2013-7-7 10:06:41

山外メ雲ジ 发表于 2013-7-7 01:00 static/image/common/back.gif
汇编我不太熟悉,不过跟调用其他的.s 函数一样的,你如何在本.s文件里调用其他 .s 的函数,就等同于那样 ...

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

younge 发表于 2013-7-7 10:19:01

汇编调用外部函数,还得搞定清楚外部函数对寄存器、堆栈等资源的修改情况。不然会有意想不到的情况发生

609178658 发表于 2013-7-7 10:33:56

younge 发表于 2013-7-7 10:19 static/image/common/back.gif
汇编调用外部函数,还得搞定清楚外部函数对寄存器、堆栈等资源的修改情况。不然会有意想不到的情况发生 ...

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

609178658 发表于 2013-7-7 10:36:05

609178658 发表于 2013-7-7 10:33 static/image/common/back.gif
谢谢,您能指点一下怎么调用么?一直没有调用过

您看这个程序可以调用么

信天游 发表于 2013-7-7 10:44:48

先用EXTERN CODE ()声明外部的函数,然后你要知道你调用的函数有没有参数,如果有参数,你要知道这几个参数分别在哪几个寄存器里,然后直接用LCALL调用即可

609178658 发表于 2013-7-7 10:46:30

信天游 发表于 2013-7-7 10:44 static/image/common/back.gif
先用EXTERN CODE ()声明外部的函数,然后你要知道你调用的函数有没有参数,如果有参数,你要知道这几个参数 ...

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

信天游 发表于 2013-7-7 12:51:37

可以的,

609178658 发表于 2013-7-7 13:27:11

信天游 发表于 2013-7-7 12:51 static/image/common/back.gif
可以的,

怎么弄得 能给点提示不?

信天游 发表于 2013-7-7 14:33:36

我在KEIL c51的启动文件里试过,调用外部文件的函数就是这么做的,我也不知道在51的汇编中行不行

younge 发表于 2013-7-9 22:00:23

609178658 发表于 2013-7-7 10:33 static/image/common/back.gif
谢谢,您能指点一下怎么调用么?一直没有调用过

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

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

笑笑我笑了 发表于 2013-7-9 22:06:25

首先要声明标号,然后要搞清楚怎么传递参数.

mvpgpz 发表于 2013-7-9 22:25:15

17楼说的有理,做过bootloader的朋友应该都会这种混合编程吧,不过本人不会,没有跟师傅学成就走了!

609178658 发表于 2013-7-10 14:42:55

younge 发表于 2013-7-9 22:00 static/image/common/back.gif
我大三时候专门研究过,当时据说只有一个老师以前常用混合编程,结果我去找他,他说好几年没用了不会了

...

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

younge 发表于 2013-7-10 23:48:50

609178658 发表于 2013-7-10 14:42 static/image/common/back.gif
为什么说是混合编程 C 和汇编的混编么?不是吧 LIB不分的吧

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

609178658 发表于 2013-7-11 17:08:31

山外メ雲ジ 发表于 2013-7-6 15:13 static/image/common/back.gif
把lib 加入工程,然后包含头文件,头文件里声明了函数的,直接调用头文件里的函数即可 ...

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

mvpgpz 发表于 2013-7-11 17:29:51

younge 发表于 2013-7-10 23:48 static/image/common/back.gif
哦。不好意思,我可能误会你的问题了

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

younge 发表于 2013-7-11 22:11:12

mvpgpz 发表于 2013-7-11 17:29 static/image/common/back.gif
简单看了下你打包的程序,貌似就是要C和汇编混合编程吧...
看你的.h文件里有好多的C函数声明
要想在汇编 ...

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

609178658 发表于 2013-7-11 23:08:23

mvpgpz 发表于 2013-7-11 17:29 static/image/common/back.gif
简单看了下你打包的程序,貌似就是要C和汇编混合编程吧...
看你的.h文件里有好多的C函数声明
要想在汇编 ...

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

mvpgpz 发表于 2013-7-12 08:55:12

609178658 发表于 2013-7-11 23:08 static/image/common/back.gif
汇编调用LIB库需要声明,是通过,INC来声明,不是那个.H文件
不是混合编程
我现在有了新问题,就是在INC里 ...

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

609178658 发表于 2013-7-12 09:05:15

mvpgpz 发表于 2013-7-12 08:55 static/image/common/back.gif
好吧 我表示无能为力了
问题解决了一定要贴出来让大家都学习一下额

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

mvpgpz 发表于 2013-7-12 18:48:16

609178658 发表于 2013-7-12 09:05 static/image/common/back.gif
你用汇编么?现在用汇编的不多了

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

609178658 发表于 2013-7-12 20:17:58

mvpgpz 发表于 2013-7-12 18:48 static/image/common/back.gif
刚学的时候用过几次,后来全用C了,唉!

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

Jach 发表于 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檔
照著它裡面呼叫的方式依樣畫葫蘆的寫就好了

609178658 发表于 2013-7-16 16:07:44

Jach 发表于 2013-7-15 16:17 static/image/common/back.gif
參數傳遞的規則在Keil C51 Compiler手冊中寫得很清楚, 如果你不想看,
那麼下面這個方法是最快的了.



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

Jach 发表于 2013-7-17 09:45:53

609178658 发表于 2013-7-16 16:07 static/image/common/back.gif
谢谢您的解答不过 您好像没有看清 我问的 问题
是汇编调用LIB 文件
还有一个问题


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

"ASM 汇编可以调用c生成的反汇编src 么", 這問題我就更不懂了, 還是讓別人來回答吧.
页: [1]
查看完整版本: LIB文件的调用