上下文
这是一项任务。我要求Segmentation Fault的解决方案,而不是要求一个解决方案的分配。我要解决的问题是实现一个递归函数

调用c中的函数。
当我只使用ex) mov r0, #15程序集进行测试时,它就像预期的那样工作了。现在,当我试图从c文件调用函数时,问题就出现了;我得到了一个分段错误错误。
我不知道为什么会这样,也不知道如何解决。在任何地方都找不到解决办法。所以我在这里。
症状
Program received signal SIGSEGV, Segmentation fault. 0x00008f24 in ?? () at push {lr} of add函数。当它第一次被召唤的时候。
main.c
#include <stdio.h>
int add(int);
int main()
{
int s = add(15);
printf("Evaluated: %d",s );
return 0;
}组合.s
.global add
add:
/*
args
r0 [int] - n
r1 [int] - a_(n-1)
r2 [int] - a_(n-2)
returns
r2 [int] - Summed value, 1 if n = 1 or n = 0
*/
push {lr}
cmp r0, #0
beq if_zero
cmp r0, #1
beq if_one
b else
if_zero:
mov r1, #1
pop {lr}
bx lr
if_one:
mov r2, #1
sub r0, r0, #1
bl add
pop {lr}
bx lr
else:
sub r0, r0, #1
bl add
mov r4, r2
add r2, r1, r2
mov r1, r4
pop {lr}
bx lr 建筑: ARM
使用:gcc assembly.s main.c -g -marm -o out编译
发布于 2021-04-05 14:25:13
这似乎是一个环境问题。
使用以下命令进行编译解决了我的问题。我忘记了-marm选项。
gcc assembly.s main.c -g -marm -o out
https://stackoverflow.com/questions/66953799
复制相似问题