Почему неверный результат умножения NASM
Начал недавно учить NASM, сижу под Arch x86_64 , NASM version 2.15.04. Нашел недавно следующий код:
section .text
global _start
_start:
mov al,'3'
sub al, '0'
mov bl, '4'
sub bl, '0'
mul bl
add al, '0'
mov [res], al
mov ecx,msg
mov edx, len
mov ebx,1
mov eax,4
int 0x80
mov ecx,res
mov edx, 1
mov ebx,1
mov eax,4
int 0x80
mov eax,1
int 0x80
section .data
msg db "The result is:", 0xA,0xD
len equ $- msg
segment .bss
res resb 2
Так вот, если умножать так, чтобы на выходе число меньше 10(в десятичной), то всё работает, а если число больше, то получается бред. (в этом варианте 3*4 = 4f)
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
После умножения в al число в пределах двух знаков. Для того, чтоб их вывести, нужно разделить ax на 10 (div bl). При этом в al будет частное, а в ah - остаток.
Если al равно нулю, идём на вывод ah
Выводим al
Выводим ah