Это мой первый пост здесь, и я тоже новичок в сборке arm64, поэтому я пытаюсь выполнить некоторые арифметические операции c, но, например, когда я пытаюсь сделать добавление, кажется, что это делается в 32-битный. Вот мой код:
.data
msg: .asciz "Value 1: "
msg2: .asciz "Value 2: "
result: .asciz "Result: %d\n"
fmt: .asciz "%d"
.balign 8
value1: .quad 0
.balign 8
value2: .quad 0
.balign 16
lr_value: .quad 0
.text
.global main
main:
adr x0, lr_value
str x30, [x0]
//Display message
adr x0,msg
bl printf
//Input first value
adr x0,fmt
adr x1,value1
bl scanf
//Display second message
adr x0,msg2
bl printf
//Input second value
adr x0,fmt
adr x1,value2
bl scanf
//Load first and second value
adr x1,value1
ldr x1,[x1]
adr x2,value2
ldr x2,[x2]
//Add both values on x1
add x1,x1,x2
//Show result
adr x0,result
bl printf
adr x0,lr_value
ldr x30,[x0]
mov w0,#0
ret
А вот результат:
Value 1: 2147483647
Value 2: 1
Result: -2147483648
Что я делаю не так? Я также пробовал умножение и вычитание
Изменить: Решил, оказалось, мне пришлось использовать% ld вместо% d, спасибо, Нейт Элдридж!