Non credere sia facile scrivere una subroutine per acquisire numeri dalla tastiera; infatti, devi tenere conto di tutte le eventualità possibili e immaginabili (inserimento di caratteri non validi, pressione del tasto Enter, pressione del tasto Backspace, svuotamento del buffer della tastiera, etc).
In alternativa alla INT 21h (servizi DOS), puoi anche usare la INT 16h (servizi del BIOS per la tastiera).
Chiamando la INT 16h con AL=01h, viene controllato il buffer della tastiera; se non è stato premuto alcun tasto, viene restituito
ZF=1 (Zero Flag).
Si può scrivere quindi:
- Codice: Seleziona tutto
readDigitLoop:
mov ah, 01h
int 16h
jz readDigitLoop
Appena viene premuto un tasto, si ha
ZF=0 e ciò provoca l'uscita dal loop.
Il tasto appena premuto può essere letto chiamando nuovamente la INT 16h con AL=00h:
- Codice: Seleziona tutto
mov ah, 00h
int 16h
I valori restituiti sono:
AL = ASCII keystroke pressed
AH = Scan code of key