Я пытаюсь запустить простую программу, написанную на ассемблере 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
в случае проблемы с размером, но безрезультатно.
Я еще не учил себя, как отлаживать или устанавливать точки останова, поэтому я полагаюсь на вывод, чтобы сделать свои предположения.
Как я могу заставить это правильно выводить?