【发布时间】:2016-11-29 23:25:58
【问题描述】:
这是我的代码,在我解释我的问题之前:
顺便说一句,我是 ARM 的新手,所以我是一个超级新手。现在,我只是删除了代码中不必要的部分。 x0 - x7 是“参数”寄存器,x29 是帧指针,x30 是链接寄存器。 x19 和 x20 只是被调用者保存的寄存器。
string1: .string "constant = %d low value = %d \n\n"
string2: .string "constant = %d \n"
.balign 4
.global main
main: stp x29, x30, [sp, -16]!
mov x29, sp
mov x20, -1000 // Setting values
mov x19, 5
print: adrp x0, string1
add x0, x0, :lo12:string1
mov x1, x19
mov x2, x20
bl printf
print2: adrp x0, string2
add x0, x0, :lo12:string2
mov x3, x19
bl printf
done: mov x0, 0
end: ldp x29, x30, [sp], 16
ret
现在由于某种原因,在“打印”期间,它打印出“常量 = 5”就好了。但是,当它转到“print2”时,它会打印出“constant = 0”。发生了什么,为什么即使我还没有操作寄存器 x19,它也不会打印到 5?我没有完全掌握这些是如何工作的。
结果:
constant = 5 low value = -1000
constant = 0
谢谢
【问题讨论】:
-
您使用的是
mov x3, x19而不是mov x1, x19。 -
哇。没看到。谢谢!
标签: assembly printing arm arm64