 | La tecnica è
quella del programma precedente, con qualche variante significativa:
 | l'esecuzione del programma
viene
fermata a livello
xxx01 (CALL
KEYwait), in attesa
della pressione di un tasto qualunque |
 | si rileva per prima l'eventuale pressione del tasto ESC (CMP AL,ESC,
JZ xxx04)
imponendo, in questo caso, il ritorno al sistema operativo, dopo un
messaggio di commiato |
 | la specificità di
EsA014.ASM è quella di controllare il codice ascii ricevuto in
AL per vedere se è compreso tra ''A'
(codice 41H) e 'Z'
(codice 5AH) oppure tra 'a'
(codice 61H) e 'z'
(codice 7AH) |
 | se non è così si salta a livello
xxx03, dove viene mostrato il
messaggio d'errore e poi si
rientra in attesa tasti;
altrimenti stampa
in sequenza il rispettivo carattere, a livello
xxx02, sulla seconda riga del monitor |
 | è interessante notare l'algoritmo
assembly utilizzato per la verifica; per capirlo osserva questo
schema: |
00H÷1FH |
|
30H÷39H |
|
41H÷5AH |
|
61H÷7AH |
|
80H÷FFH |
Ascii di Controllo |
..... |
'0'÷'9' |
..... |
'A'÷'Z' |
..... |
'a'÷'z' |
..... |
Ascii Estesi |
|
|
|
|
├ NO ─
JA xxx03 ─> |
<─────
JB xxx03 ── NO
───┤ |
|
|
|
|
|
|
|
|
|
<────
JB xxx02 ─── SI ───────────┤ |
<───
JBE xxx03 ─── NO
─────────────┤ |
|
|
0÷31 |
|
48÷57 |
|
65÷90 |
|
97÷122 |
|
128÷255 |
 | Dunque i caratteri ascii non
ci interessano se il loro valore è:
 | più
grande dell'ultima lettera minuscola, 'z'=7AH
(CMP AL,'z',
JA xxx03, Above) |
 |
più piccolo della prima lettera maiuscola,
'A'=41H
(CMP AL,'A',
JB xxx03, Below) |
 |
più piccolo della prima lettera minuscola,
'a'=61H
(CMP AL,'a',
JB xxx03, Below)
se prima abbiamo escluso tutte le lettere
maiuscole, ''A'÷''Z'
(= 41H÷5AH)
(CMP AL,'Z',
JBE xxx02, Below Equal)
|
|
|