Sezione |
Indirizzi Base
Registri Interni
|
Palestra Livello Apprendisti Livello Esperti |
Programmare in Assembly |
Esercizio n° A015 3/4 [78 di 157] |
|
|
||
Acquisizione Caratteri - Pressione di soli tasti LETTERALI - VERSIONE OTTIMIZZATA | ||
Analisi del Main Loop |
|
Aggiornato 12 febbraio 2007 - [nel sorgente Es015.ASM sostituito JG xxx02 con JA xxx02; ricompilare l'esercizio] |
Il codice del nel Main Loop è del tutto identico a quello di EsA014.ASM, con un'unica differenza: la tecnica di verifica dei tasti letterali. |
|
Anche EsA015.ASM ha il compito di controllare se codice ascii ricevuto in AL è compreso tra ''A' (codice 41H) e 'Z' (codice 5AH) oppure tra 'a' (codice 61H) e 'z' (codice 7AH); ma la verifica su 2 intervalli, oltre ad essere piuttosto impegnativa, è molto frequentemente sostanzialmente inutile. |
|
Di solito non è necessario discriminare tra lettera maiuscola o minuscola: la necessità di distinguerle è in uso solo se si devono acquisire testi, non se si devono prendere decisioni, nel qual caso basta sapere quale lettera è stata premuta, indipendentemente dal suo ordine. |
|
Tuttavia rinunciare a questa differenziazione può portare
alcuni imprevisti rischi, vanificando
l'efficacia del nostro progetto:
|
|
Il dramma sta nel fatto che questa competenza ora è certamente tua, amato frequentatore del mio sito, ma non del possibile utente del tuo progetto... | |
E se l'eseguibile va in mano a gente meno provveduta? |
|
La soluzione c'è: meglio prevenire che combattere! Se osservi il codice assembly descritto qui sotto, noterai che la differenza sta proprio nel modo con cui viene eseguito il controllo del codice ascii ricevuto in AL: |
|
|
Esercizio |
NB: se il testo nell'Area
ti
sembra strano installa il font Giobe.TTF: clicca qui!! |
|
Se lo desideri per facilitare il confronto puoi aprire una seconda pagina con il codice della volta; l'esecuzione del programma viene ancora fermata a livello xxx01 (CALL KEYwait), in attesa della pressione di un tasto qualunque, rilevando per prima l'eventuale pressione del tasto ESC (CMP AL,ESC, JZ xxx03) imponendo, in questo caso, il ritorno al sistema operativo, dopo un messaggio di commiato. |
|
Vediamo in dettaglio le varie fasi:
| |||||||||||
L'immediata conseguenza è che basta verificare
un solo intervallo: quello
compreso tra ''A'
(codice 41H) e 'Z'
(codice 5AH)
delle lettere maiuscole:
|
|
00H÷1FH | 41H÷5AH | 80H÷FFH | ||
Ascii di Controllo | ..... | 'A'÷'Z' | ..... | Ascii Estesi |
<─ JB xxx02 ─ NO ───┤ |
├──── NO ─ JA xxx02 ──> |
|||
0÷31 | 65÷90 | 128÷255 |
|
Non dimenticare le Regole (vedi fondo pagina) che governano la gestione dei numeri senza segno, come i codici Ascii lasciati in AL dalla procedura KEYwait. |
|
Con questo esercizio sospendo il servizio di fornitura dell'estratto del file Listato generato dall’assemblatore: eccoti l'ultimo, EsA014.LST; ormai sei in grado di operare da solo: |
|
|
Palestra Apprendisti | Esercizio n° A015 3/4 | |||||||
78 di 157 |
|
|
|
Home |
|
|||||||
|
Motore Ricerca |
|