【发布时间】:2018-07-05 10:43:22
【问题描述】:
具体来说:
- arm 汇编函数写在单独的文件中,例如 .S 文件或 .asm 文件。
- 我需要在main.c中调用这个函数
- ARM 程序集采用 ARMv8 架构。
我已经编写了一些测试代码,但它无法工作。
#include <stdio.h>
extern int a_add(int a, int b);
int main(){
int fi=5;
int se=7;
int result=a_add(fi, se);
printf("result is %d", result);
return 0;
}
以下是汇编代码。(a_add.S)
.section .text
.globl a_add
a_add:
add x3,x1,x0
mov x0,x3
br x30
有谁知道我可以如何修复这两个文件以让 a_add 函数工作? 我还没有尝试过 .asm 文件。
感谢任何帮助,如果我在表达上犯了错误,请原谅,但我希望我的问题很清楚。
【问题讨论】:
-
这不是标准化的,所以它取决于编译器。
-
“无法工作”不是一个好的描述。你有错误吗?如果是这样,具体是什么?你用什么命令来编译、汇编和链接?如果遇到运行时错误,调试器会说什么?
-
很抱歉我在汇编代码上弄错了。它是“br x30”而不是“bx lr”。
-
报告了1个错误。 “错误:ld 返回 1 个退出状态”。老实说,我不知道这意味着什么。编译器给出的另一个信息是使用未定义的 a_add(int, int) 函数。似乎编译器没有将这两个文件链接在一起,这就是我的问题所在。
-
@Lazyloper 你能发布完整的编译器调用和你得到的完整错误消息吗?