我开始学习在汇编中调用函数。我在互联网上关注了很多教程,并对它进行了一些修改。
但是它并没有真正按预期工作。
.data
hello: .ascii "hello everyone\n"
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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。