Как да преместите стойност от .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