0

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

在汇编代码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调用该函数时,它会被引用和解析吗?

4

2 回答 2

4

编译 C,组装 ASM,然后将两者链接到一个可执行文件中。链接器在看到 C 的目标文件需要它之后,会在 ASM 的目标文件中找到 FIL_2ORD()。

目标文件由 C 编译器和汇编程序分别为每个源文件创建。

于 2013-06-24T17:54:55.130 回答
1

我的问题是汇编代码是否会被编译和链接,每当 main.c 调用该函数时,它会被引用和解析吗?

我假设您使用的是 GCC 编译器 - 是的.global,程序集文件中的指令使_FIL_2ORD符号对链接器公开,因此它可以从程序集源代码外部调用。

这是一个如何使用命令行编译、汇编和链接的示例

gcc -o myexe Main.c convert.S

中的extern声明convert.h提示 C 编译器外部函数期望的参数。汇编源代码应遵守此声明。您应该查找目标平台的标准 C 调用约定,以了解参数传递的规则,并相应地编写汇编代码。

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

于 2013-06-24T18:43:37.000 回答