Почему неверный результат умножения 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

→ Ссылка