Сравнение суммы двух чисел в ассемблере x86 - PullRequest
1 голос
/ 11 апреля 2020

Я пытаюсь запустить простую программу, написанную на ассемблере x86 AT & T, но мне кажется, что я получаю странный результат - очевидно, я делаю что-то не так.

/*
 Take two integer numbers, get the sum and check if they are equal.
 If they are equal, print so, if not, exit silently.
 */

.data

num1: .byte 100
num2: .byte 50
sum:  .byte 150
msg:  .string "Sum is correct"

.text

.globl main
main:
    /* compute sum */
    mov $num1, %eax
    add $num2, %eax
    /* compare and jump */
    cmp $sum, %eax
    jne finish
    /* print message */
    mov $msg, %edi
    call puts
finish:
    ret

Выше программа прекрасно компилируется с gcc в Linux, но действует так, как будто числа не равны и, следовательно, ничего не печатается.

Я попробовал тот же код, но закомментировал переход, и он показывает текст, поэтому по какой-то причине cmp не дает мне правильный результат. Я также попытался изменить eax на al и .byte на .long в случае проблемы с размером, но безрезультатно.

Я еще не учил себя, как отлаживать или устанавливать точки останова, поэтому я полагаюсь на вывод, чтобы сделать свои предположения.

Как я могу заставить это правильно выводить?

...