32-битный ADD на сборке Aarch64 - PullRequest
0 голосов
/ 18 июня 2020

Это мой первый пост здесь, и я тоже новичок в сборке 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, спасибо, Нейт Элдридж!

...