Assembler - Moltiplicazione di numeri

Riprendiamo a parlare di linguaggio a basso livello.
Ecco un nuovo esercizio in linguaggio Assembler: realizzare un programma capace di effettuare la moltiplicazione di due numeri con somme ripetute. (Stampa del prodotto max a 2 cifre).

;ESERCIZIO: Moltiplicazione di due numeri con somme ripetute. (stampa max 2 cifre)

.model small

.stack 100h

.data
striper byte 32d, 'per', 32d, '$'

.code

start:

mov ah, 1h
int 21h
sub al, 30h  ; dato che un carattere immesso da tastiera viene convertito nel corrispettivo codice ascii. Per poter lavorare col numero ascii, dobbiamo sottrarre 30h. (dal segmento data invece lo abbiamo già diretto il numero ascii)


mov bl, al

cmp bl, 0
je finez

sub bl, 1

mov ax, @data
mov ds, ax

mov dx, offset striper
mov ah, 9h
int 21h

mov ah, 1h
int 21h
sub al, 30h

cmp al, 0
je finez

mov dl, al

prodotto:

cmp bl, 0
jle fine
add dl, al
dec bl
jmp prodotto

fine:

mov bl, dl

mov dl, ' '
mov ah, 2h
int 21h 

mov dl, '='
mov ah, 2h
int 21h

mov dl, ' '
mov ah, 2h
int 21h

mov ah, 0
mov al, bl

mov cl, 10

div cl

add ah, 30h
mov bl, ah

add al, 30h

mov dl, al
mov ah, 2h
int 21h

mov dl, bl
mov ah, 2h
int 21h

mov ax, 4c00h
int 21h

finez:

mov dl, ' '
mov ah, 2h
int 21h

mov dl, '='
mov ah, 2h
int 21h

mov dl, ' '
mov ah, 2h
int 21h

mov dl, '0'
mov ah, 2h
int 21h

mov ax, 4c00h
int 21h

end start