Аз съм начинаещ в асемблерния език. Опитвам се да умножа две числа.
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