ARMv8 Печать нескольких строк с одинаковым номером
Вот мой код, прежде чем я объясню свою проблему:
Кстати, я новичок в 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
Теперь по какой-то причине во время "print" он печатает "constant = 5" просто отлично. Однако, когда он идет к "print2", он печатает "constant = 0". Что происходит, и почему он не печатает до 5, хотя я еще не манипулировал регистром x19? Я не совсем понимаю, как они работают.
Результат:
constant = 5 low value = -1000
constant = 0
Спасибо
1 ответ
Если вы хотите создать обычные функции, по сравнению со вставкой таких функций в тело вашего основного раздела кода, вот некоторый код для заправки насоса ARMv8. Мой.include предназначен только для моих макросов (т.е. push2, pop2 и т. Д.); это тот же код, который вы используете.
.data
string1: .string "constant = %d low value = %d\n\n"
string2: .string "constant = %d \n"
.text
.global main
.include "mymac_armv8.s" // for push2, pop2, and _exit macros
main:
movn x20, 1000
mov x19, 5
bl write1
bl write2
_exit
write1:
push2 x29, x30
push2 x1, x2
ldr x0,=string1
mov x1, x19
mov x2, x20
bl printf
pop2 x1, x2
pop2 x29, x30
ret
write2:
push2 x29, x30
push2 x1, x2
ldr x0,=string2
mov x1, x19
mov x2, x20
bl printf
pop2 x1, x2
pop2 x29, x30
ret