Sezione |
Indirizzi Base
Registri Interni
|
Palestra Livello Apprendisti Livello Esperti |
Programmare in Assembly |
INTRODUZIONE [1 di 23] |
|
|
||
Acquisizione Caratteri - Rileva la pressione di tasti autorizzati e segnala errore per gli altri | ||
Analisi del Codice Sorgente [5 di 6] - Problema dell'influenza dello stato di Caps Lock sui tasti letterali |
|
Quando un programma è chiamato a rilevare la pressione di un tasto letterale restituisce informazioni dipendenti dallo stato logico del tasto Caps Lock , quello con il disegno di un lucchetto, a metà della prima colonna di tasti, a sinistra. |
|
Quando si preme un tasto con una lettera sopra non si bada mai allo stato logico del tasto Caps Lock, il cui compito è quello di renderle maiuscole o minuscole. | |||||
Per la verità esso è sempre noto:
nell'angolo in alto a destra della tua tastiera ci sono 3 piccole
luci (led): quella
centrale è proprio associata allo stato di Caps
Lock:
|
|
Il problema sta dunque nel fatto che la gran parte degli utenti non conosce il significato di questo segnalatore e, anche quando ciò non fosse, preme meccanicamente i tasti, senza curarsi se le lettere sono predisposte per il maiuscolo o il minuscolo. |
|
La lettura dei tasti letterali è a rischio... Poichè il codice Ascii restituito dalla KEYwait dipende dallo stato di Caps Lock, spesso casuale e sostanzialmente imprevedibile, risulta difficile sapere se si tratta di quello della lettera minuscola o quello della lettera Maiuscola. |
|
Più precisamente il codice Ascii che verrà associato al
tasto letterale, che sarà:
|
|
In conclusione, se si desidera rilevare la pressione di un tasto letterale, è fortemente consigliato intervenire sul codice Ascii restituito dall'hardware della tastiera; in sostanza l'istruzione AND AL,0DFH interviene sul bit5 del byte contenuto in AL, forzandolo o lasciandolo a 0 | |
Ciò equivale a trasformare il codice ascii acquisito da quello di una lettera minuscola da quello di una lettera maiuscola, evitando il rischio introdotto dall'incertezza della condizione logica del tasto Caps Lock. |
|
Verificando l'uguaglianza con l'ascii maiuscolo (per esempio: CMP AL,'A') la pressione del tasto letterale sarà comunque rilevata, anche se in condizioni di codifica minuscola! |
|
Prima di verificare la pressione di un tasto letterale conviene sempre forzare a 0 il bit5 del suo codice ascii: in questo modo se è quello di una lettera maiuscola non cambia niente, ma se si tratta di quello di una minuscola viene trasformato magicamente in maiuscola. |
|
Abbiamo trattato questa tecnica già nella scheda dedicata all'istruzione AND; in pratica l'operazione logica AND di un numero a 8 bit (contenuto in AL) con il valore 1101 1111 (=DFH) forza comunque a 0 il bit5 del dato letto, trasformando appunto le minuscole (es: "a" = 61H = 0110 0001) in maiuscole (es"A" = 41H = 0100 0001): |
|
61H (='a')
0110 0001 AND DFH 1101 1111 = ------------- 41H (='A') 0100 0001 |
Per finire osserviamo la parte finale del Main loop per commentare il comportamento del programma quando rileva la pressione di un tasto non autorizzato: naturalmente si deve rientrare all'inizio del main loop stesso, in attesa di altri tasti, magari dopo aver segnalato l'indisponibilità con un messaggio e/o un suono: |
|
|
Palestra Esperti | INTRODUZIONE | |||||||
1 di 23 |
|
|
|
|
Home |
|
|||||||
|
Motore Ricerca |
|