我开始学习在汇编语言中调用函数。我在网上看了很多教程,并对它做了一些修改。
但它并没有真正像预期的那样工作。
.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我不知道我错在哪里。
发布于 2019-03-20 22:52:38
对于函数调用,使用bl (分支和链接)指令。这会将lr设置为包含返回地址。您的代码使用b (分支)而不是bl,因此没有设置lr,并且从println返回的地址不可预测,可能会使您的程序崩溃。
要解决此问题,请对函数调用使用bl而不是b:
bl println
bl exithttps://stackoverflow.com/questions/55263305
复制相似问题