ARM中的这段代码有什么问题

时间:2014-03-20 11:52:01

标签: assembly arm raspberry-pi

我刚刚编译了一个简单的程序,它将添加两个数字并将在控制台上打印。我已经在RPI板上编译了它。我认为它编译得很好但是当我运行时我得到了分段错误。

.text 
.global main
.extern print
 out:
   .ascii "THE sum is %d\n\0"
 main:
 push {ip,lr}
 mov r0,#5
 mov r1,#4
 add r2,r1,r0 
 ldr r2,=out    
 bl printf
 pop {ip,pc}
 stop: b stop

是因为我没有正确地遵循ARM EABI吗?

有谁能让我知道我做错了什么?

1 个答案:

答案 0 :(得分:3)

printf(out)的格式字符串需要进入R0,而不是R2。变化:

ldr r2,=out

为:

ldr r0,=out

此外,如果你想要打印4和5的总和,那么这应该在R1中(否则你只是打印4)。所以改变:

add r2,r1,r0 

为:

add r1,r1,r0