我正在学习一门与ARM汇编语言相关的课程,但是在开始时遇到了些问题。我已经写了一个简单的C语言代码:
int main()
{
int a = 10;
int b = 20;
int c = a+b;
}
我使用gnu arm命令将其转换为汇编代码:
arm-elf-gcc -S first.c
这将生成一个名为first.s的文件,其中包含汇编代码:
.file "first.c"
.text
.align 2
.global main
.type main, %function
main:
@ args = 0, pretend = 0, frame = 12
@ frame_needed = 1, uses_anonymous_args = 0
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
sub fp, ip, #4
sub sp, sp, #12
mov r3, #10
str r3, [fp, #-16]
mov r3, #20
str r3, [fp, #-20]
ldr r2, [fp, #-16]
ldr r3, [fp, #-20]
add r3, r2, r3
str r3, [fp, #-24]
mov r0, r3
sub sp, fp, #12
ldmfd sp, {fp, sp, pc}
.size main, .-main
.ident "GCC: (GNU) 3.4.3"
然后我使用以下命令编译汇编代码:
arm-elf-gcc -g first.s
这生成了一个 a.out 二进制文件。然后我尝试使用 qemu 命令运行 a.out:
qemu-arm a.out
但是这会生成输出。
Segmentation fault
我找不到错误,我做错了什么吗?
qemu-arm -L ./gnemul/qemu-arm ./a.out
,但是没有帮助,它仍然显示相同的Segmentation fault
。我已经将gnemul
文件夹从linux-user-test
文件夹中复制过来了。 - UNK