Как переместить значение из .data для регистрации в NASM?

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

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?


person Alexander    schedule 22.09.2020    source источник
comment
mov eax, [a] загружает 4 байта, а a всего два байта. Вместо этого используйте movzx eax, word [a].   -  person prl    schedule 22.09.2020
comment
a и b — это слова, но вы читаете двойные слова. Либо измените dw на dd, либо измените mov на movzx eax, word [a].   -  person Michael    schedule 22.09.2020
comment
Спасибо, @prl.   -  person Alexander    schedule 22.09.2020
comment
Спасибо, @Michael!   -  person Alexander    schedule 22.09.2020


Ответы (1)


В комментариях Михаил ответил на мой вопрос, смена dw на dd решила проблему.

person Alexander    schedule 22.09.2020