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