[GUIDA -Assembly] Semplice addizione

Pubblicità

gio_gio

Utente Èlite
Messaggi
1,778
Reazioni
4
Punteggio
99
Posto qui questa mini guida, anche se è più una soluzione, perchè il forum è un pò "spoglio" in questa sezione..
Il linguaggio trattato è l'assemby (o assembler che dir si voglia).
Questo piccolo programma esegue l'addizione fra due numeri acquisiti tramite un interrupt 21h e da in output tramite la funzione 2 dello stesso interrupt la loro somma.
Ecco il codice:

#make_COM#

; File COM é caricato all'indirizzo CS:0100h
ORG 100h

Scrivi MACRO dato
mov dx, offset dato ; "offset leggi" = stringa da leggere
mov ah, 09h ; Mette nel registro AH il valore 09h per chiamare la funzione 9 dell'interrupt 21h
int 21h ; Esegue l'interruzione 21h Funzione 09h
ENDM

Scrivi Primo
mov ah, 01h
int 21h ; Chiamo la funzione 1 dell'interrupt 21h
sub al, 30h ; Sottraggo 30 per far uscire un numero compreso fra 0-9
mov bl, al ; Salvo questo numero nel registro BL

Scrivi Secondo
mov ah,01
int 21h ; Richiamo la funzione 1 dell'interrupt 21h
sub al, 30h ; Sottraggo anche qui 30 al carattere digitato

add al, bl ; Addiziono i due caratteri avuti

mov ah,00h ; Metto nel registro il valore 00h cosi da usare tutto l'accumulatore

mov bl,10 ; Metto in BL 10 per effettuare la divisione

div bl ; divido AX per BL (10), cosi avrò in AL il quoziente e in AH il resto

add al,30h ; Addiziono al e ah per far diventare il risultato in esadecimale cosi da avere il rispettivo carattere in ASCII
add ah,30h

mov bl,ah ; Salvo il contenuto di AH perché altrimenti andrebbe perso alla prima esecuzione dell'int 21h
mov bh,al
Scrivi Risultato
mov dl, bh ; Sposto il contenuto di AL in DL per fare l'output del carattere
mov ah, 02h ; Metto in AH 02 per chiamare la funzione 2 dell'int 21h
int 21h ; Chiamo l'int 21h funzione 2

mov dl, bl ; Sposto il contenuto di AL in DL per fare l'output del carattere
mov ah, 02h ; Metto in AH 02 per chiamare la funzione 2 dell'int 21h
int 21h ; Chiamo l'int 21h funzione 2

hlt
 
Ultima modifica:
Pubblicità
Pubblicità
Indietro
Top