Я новичок в ассемблере. Я пытаюсь умножить два числа.
section .data
a dw 1;
b dw 2;
global _start
section .text
_start:
mov eax, [a];
mov ebx, [b];
movv:
mul ebx;
mull:
mov eax, 1;
mov ebx, 0;
int 80h;
Я компилирую и запускаю его с помощью следующей команды: nasm -g -f elf pr1.s && ld -m elf_i386 pr1.o -o pr1 && gdb ./pr1
Когда я в gdb просматриваю значение регистра eax, я получаю 131073 и ebx 65538
Почему я получаю эти значения вместо 1 и 2?
mov eax, [a]
загружает 4 байта, аa
всего два байта. Вместо этого используйтеmovzx eax, word [a]
. - person prl   schedule 22.09.2020a
иb
— это слова, но вы читаете двойные слова. Либо изменитеdw
наdd
, либо изменитеmov
наmovzx eax, word [a]
. - person Michael   schedule 22.09.2020