|
 |
Raccolta di Procedure ASM |
INstrin
[23 di 54] |
 | Rimane in attesa
di una Stringa di
caratteri nella posizione di stampa
corrente. |
 | La Procedura
si chiama in questo modo: |
 | In
ingresso bisogna predisporre:
 | DX
con l'indirizzo di Offset del Buffer d'acquisizione, la
struttura del quale è
piuttosto particolare (vedi sotto) |
|
 | La seguente Area di Testo
mostra il Modulo varie05 utilizzato per
inserire la Procedura
nella Libreria
Giobe.ASM/LIB: |
|
INstrin / varie05 |
NB: se il testo contenuto nell'Area
ti
sembra strano (cioè se contiene
caratteri inconsueti) non hai ancora
installato il font
Giobe.TTF
:
clicca qui!! |
 | L'analisi del codice mette in evidenza che, contrariamente
a tutte le altre Procedure della Libreria, questa lavora
a livello DOS; chiama infatti la Funzione
DOS 0CH
dell'INT 21H, con il
compito di vuotare il Buffer (area di
memoria) puntato in ingresso da
DS:DX
e poi di attivare la una seconda Funzione DOS, specificata dal
numero inserito in ingresso in
AL. |
 | Poichè la Procedura
predispone il valore 0AH, la
struttura chiamata è la Funzione DOS 0AH
dell'INT 21H, cui
spetta il compito vero: quello di leggere una stringa
di caratteri dal dispositivo standard d'ingresso,
cioè dalla tastiera,
facendone
ECO a video, finchè non risulta premuto
Invio. |
 | Come in tutte le attività promosse a livello BIOS non
esiste la possibilità di colorare i caratteri in acquisizione: essi verranno stampati con i colori di default
del DOS (di solito bianco su nero) |
 | Perchè la Procedura
( e le Funzioni DOS) funzioni correttamente il
Buffer deve essere costruito ad arte; la
seguente Area di Testo mostra un modo
elegante di definirlo: |
 | L'analisi del suo contenuto suggerisce alcune
considerazioni:
 | esso va definito nella zona detta
area destinata ai dati del programma, con la
pseudooperazione DB |
 | la prima etichetta,
associa il nome Buffer al
primo byte
dell'area ad esso dedicata |
 | la costante PRE_LEN,
definita dal programma chiamante nella zona
destinata alle costanti del programma con PRE_LEN
EQU 10, rende dinamica la struttura: basta infatti
cambiare il valore (nell'esempio 10) ad essa affidato per obbligare il compilatore a
riservare automaticamente l'adeguato nuovo numero di bytes.. |
 | il suo primo byte (definito
MAX_LEN) deve
specificare la lunghezza della stringa attesa da tastiera (incluso
il codice 0DH associato alla pressione
finale di Invio), quindi PRE_LEN+1 |
 | il secondo byte (definito
STR_LEN) viene
scritto direttamente
dal DOS con il
numero dei
caratteri effettivamente acquisiti (escluso
il codice 0DH associato alla pressione
finale di Invio) |
 | i caratteri sono
posti nel Buffer a partire dalla sua terza
locazione (definita STRINGA) (incluso il codice
0DH associato alla pressione finale di
Invio) |
|
 | Per esempio,
se la costante è stata predisposta al valore PRE_LEN
EQU 4:
 | dopo aver premuto i tasti "1",
"2" e invio nell'area
di memoria destinata al buffer c'è: 5,2,'12♪
' |
 | dopo aver premuto i tasti "1",
"2" , "3"
, "4" e invio nell'area
di memoria destinata al buffer c'è: 5,4,'1234♪' |
 | la variabile STR_LEN
viene effettivamente caricata dal DOS
con i valori, rispettivamente, 2
e 4 |
 | la zona dei valori immessi
:
 | è comunque ampia 5
caratteri (come indica il contenuto di
MAX_LEN =PRE_LEN+1=5) |
 | è riempita d'ufficio con altrettanti spazi (5
spazi) |
 | contiene sempre la sequenza dei caratteri immessi, più
il carattere "♪", che rende in forma
visiva il valore 0DH di Invio,
comunque inserito |
 | se il numero dei caratteri immessi è inferiore a quello
massimo, dopo il carattere "♪", sono
sempre presenti spazi |
|
|
 | Con PRE_LEN EQU
10:
 | dopo aver premuto i tasti da "0"
a "34" e invio nell'area
di memoria destinata al buffer c'è: 11,5,'01234♪
' |
 | dopo aver premuto i tasti da "0"
a "9" e invio nell'area
di memoria destinata al buffer c'è: 11,10, '0123456789♪' |
|
 | Il corretto funzionamento di questa Procedura potrebbe essere
opportuno fissare anche le
coordinate della posizione di stampa (con
M_CURSOR),
sebbene questa informazione
non sia strettamente necessaria:
 | se non si specificano le
coordinate la procedura collocherà il carattere nella
posizione di stampa corrente (là dove lampeggia il cursore) |
|
 | Per esempio, per acquisire la stringa nel punto di coordinate riga=10
e colonna=20, si deve scrivere questa
sequenza di istruzioni: |
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|