Вот мой код, прежде чем я объясняю свою проблему:ARMv8 Печать нескольких строк с тем же числом Reference
Я новичок в 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
Теперь по какой-то причине во время «печати» он печатает «constant = 5» просто отлично. Однако, когда он переходит к «print2», он печатает «constant = 0». Что происходит и почему оно не печатается до 5, хотя я еще не манипулировал регистром x19? Я не совсем понимаю, как они работают.
Результат:
constant = 5 low value = -1000
constant = 0
благодаря
Вы сделали «mov x3, x19» вместо 'mov x1, x19'. – Jester
Ничего себе. Не видел этого. благодаря! – Weissman