Parametro ricevuto: nei registri DS:DX ci deve essere il puntatore all'area di memoria in cui scrivere la stringa acquisita da tastiera
Formato dell'area di memoria usata dal servizio 0Ah:
Offset | Nr byte | Descrizione |
0 | 1 | massimo numero di caratteri |
1 | 1 | numero di caratteri inseriti da tastiera, escluso CR |
2 | n | caratteri che compongono la stringa immessa, compreso carriage return |
Il programma che si propone acquisisce una stringa immessa da tastiera e la stampa sullo schermo. In questo esempio si illustra il procedimento per generare un file COM, un file eseguibile che ha tutti i segmenti sovrapposti (nello spazio di 64K).
.model TINY
.code
ORG 100H ; un file COM viene caricato all'offset 100h
In un programma con estensione .com i segmenti dati (DS ed ES) coincidono con il segmento CS:
inizio:
MOV AX, CS
MOV DS, AX
MOV ES, AX
L'immissione di una stringa da tastiera avviene richiamando la funzione 0AH dell'int 21h. Questa legge una stringa da tastiera e, quando si preme invio, la memorizza all'indirizzo DS:DX
MOV DX, OFFSET s1
MOV AH, 0AH
INT 21h
La variabile nl (Nuova Linea) contiene i codici per andare a capo: 13 (Carriage Return) e 10 (Line Feed). Il suo indirizzo viene copiato in DX perchè la funzione 9 dell'int 21h stampa la stringa puntata da DS:DX.
MOV DX, offset nl
MOV AH, 9
INT 21h
Nel registro DI si porta l'indirizzo della stringa introdotta. Il registro BX viene azzerato:
MOV DI, offset s1
XOR BX, BX
Si legge in BL il secondo byte della variabile contenente la stringa introdotta. Il secondo byte rappresenta il numero di caratteri della stringa.
MOV BL, [DI+1]
Aggiungendo a DI questo valore e sommando anche i 2 byte iniziali si trova la fine della stringa, dove si inserisce il carattere di fine stringa
MOV BYTE PTR [DI+BX+2], '$'
Per stampare la stringa si porta in DX il puntatore alla stringa:
MOV DX, offset s1
Il primo byte contiene la dimensione del buffer, il secondo contiene il numero effettivo di caratteri. Quindi si devono saltare questi 2 byte, prima di richiamare la funzione 9 dell'int 21:
ADD DX, 2
MOV AH, 9
INT 21h
A questo punto il semplice programma dimostrativo dei servizi 9 e 10 dell'int 21h è terminato e si restituisce il controllo al sistema operativo:
MOV AH, 4Ch
INT 21h
Le variabili usate dal programma sono state dichiarate al termine del codice:
s1 DB 30, 30 dup(' ')
nl DB 13, 10, '$'
END inizio