Ottenere input utente in assembly 8086 per operazioni di addizione
Introduzione alla gestione input in assembly 8086
Quando si programma in assembly 8086, ottenere input utente per operazioni aritmetiche come l'addizione richiede l'uso di interrupt DOS. L'approccio più comune prevede l'uso di interrupt 21h con funzione 01h per leggere un singolo carattere dall'input standard, quindi convertire quel carattere ASCII al suo equivalente numerico.
Esempio completo di programma addizione
Il programma seguente dimostra come richiedere due numeri a singola cifra, sommarli e visualizzare il risultato:
.MODEL SMALL .STACK 100H .DATA MSG DB 'Enter two numbers: $' CRLF DB 0DH, 0AH, '$' .CODE MAIN PROC ; Initialize data segment MOV AX, @DATA MOV DS, AX ; Display prompt MOV AH, 9 LEA DX, MSG INT 21H ; Get first number MOV AH, 1 INT 21H SUB AL, 30H ; Convert ASCII to decimal MOV BL, AL ; Store in BL ; Get second number MOV AH, 1 INT 21H SUB AL, 30H ; Convert ASCII to decimal MOV BH, AL ; Store in BH ; Perform addition ADD BL, BH ; BL = BL + BH MOV AL, BL ; Move result to AL for display ; Display result MOV AH, 2 MOV DL, AL INT 21H ; New line MOV AH, 9 LEA DX, CRLF INT 21H ; Exit program MOV AH, 4CH INT 21H MAIN ENDP END MAIN Concetti chiave spiegati
Funzioni interrupt DOS 21h
- Funzione 01h: Legge un carattere dall'input standard con eco
- Funzione 02h: Scrive un carattere sull'output standard
- Funzione 09h: Visualizza una stringa terminata da $
- Funzione 4Ch: Termina il programma e torna a DOS
Conversione ASCII
I caratteri numerici '0'-'9' hanno valori ASCII 30h-39h. Sottraendo 30h si converte il codice ASCII al suo valore numerico effettivo (0-9). Questa conversione è essenziale prima di eseguire operazioni aritmetiche.
Uso dei registri
Il programma usa i registri BL e BH per memorizzare i due numeri di input, poi li somma usando l'istruzione ADD. Il risultato rimane in BL, che viene spostato in AL per la visualizzazione tramite il registro DL.
Limitazioni ed estensioni
Questo esempio base gestisce solo numeri a singola cifra (0-9). Per input multi-cifra, servirebbe implementare un ciclo che legge caratteri fino a premere Invio, costruendo il numero moltiplicando il valore accumulato per 10 e aggiungendo ogni nuova cifra.