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
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: