2013-06-24 136 views
0

我有一个包含C代码和汇编代码的示例项目 有Main.c,Main.hconvert.S一个包含C代码和汇编代码的C项目

里面的汇编代码convert.S有下面的代码:

.global 
.section .bss 
.section .text 

.global _FIL_2ORD     
_FIL_2ORD: 

的CONVERT.H文件中:

extern int FIL_2ORD(
    tFIL2HISTORY *history; 
    tFIL2COEFF *coeff; 
    int input; 
); 

里面的MAIN.C功能如果它调用FIL_2ORD();这样才有通过convert.h文件中声明的汇编代码中的函数解决?

我的问题是汇编代码是否会得到编译和链接,并随时根据main.c调用该函数将它被引用和解决?

+0

我不明白你的问题。这当然是可能的,如果你想要一个例子,从C调用到组件,在一个单独的文件在C中定义的虚拟函数与编译“GCC -S”。然后看看gcc生成的.s文件。 –

+0

您的意思是主要的功能,当你写的“MAIN.C功能”? –

回答

4

编译C,组装ASM,并连接在一起的两成一个可执行文件。链接器在发现C的目标文件需要它时,将在ASM的目标文件中找到FIL_2ORD()。

对象文件是由C编译器和汇编程序,用于分别每个源文件创建的。

1

我的问题是汇编代码是否会被编译和链接 ,并且每当main.c中调用该函数会是 引用和解决?

我假设你正在使用的GCC编译器 - 是的.global指令的汇编文件,使_FIL_2ORD符号公共给连接器,因此,它将成为从组件的源代码之外调用。

这是你如何编译,汇编和链接使用命令行

gcc -o myexe Main.c convert.S 

extern声明中convert.h是暗示什么参数的外部函数需要C编译器的例子。汇编源代码应该遵守这个声明。您应该查找目标平台的标准C调用约定,以查看参数如何传递的规则,并相应地编写汇编代码。

根据不同的目标平台上,在_FIL_2ORD声明前导下划线字符(内部convert.S)可能会或可能没有必要(这是我在上段提到的特定于平台的C调用约定的一部分) 。如果程序无法链接,请重试,这次删除前导下划线。