我开始学习呼叫汇编中的函数。我在互联网上遵循了很多教程,并对它进行了一些修改。
,但它并不是真正正常的。
.data
hello: .ascii "hello everyonen"
len= . - hello
.text
.global _start
exit:
mov %r1,#0
mov %r2,#0
mov %r0, #0
mov %r7, #1
swi #0
println:
mov %r7, #4
swi #0
mov %pc, %lr
bx %r7
_start:
ldr %r1, =hello
ldr %r2, =len
b println
b exit
,输出进行
hello everyone
Segmentation fault
我不知道我在哪里错了。
用于函数调用,使用bl
(分支和链接)指令。这将设置lr
以包含返回地址。您的代码使用b
(分支)而不是bl
,因此未设置lr
,并且从println
返回到一个不可预测的地址,可能崩溃了您的程序。
要解决此问题,请使用bl
代替b
进行函数调用:
bl println
bl exit