Sezione

Indirizzi Base Registri Interni
Area Comunicazione BIOS Funzioni BIOS Funzioni DOS
Prefazione Capitolo 1 Capitolo 2 Schede
Libreria ASM Libreria MAC Palestra Progetti ASM
Info Download INDICE

Palestra Livello Apprendisti Livello Esperti

Home » Programma il Computer » Tutorial Assembly

Palestra Assembly - Home Page

  Programmare in Assembly

Esercizio n° A015 3/4 [78 di 157] 

               

Analisi del Codice · Analisi del Main Loop · Conclusioni

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]
bullet 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.

  

bulletAnche 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.

  

bulletDi 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.

  

bulletTuttavia rinunciare a questa differenziazione può portare alcuni imprevisti rischi, vanificando l'efficacia del nostro progetto:
bulletquando si preme una lettera non ci si cura di controllare lo stato del tasto Caps Lock (quello con il lucchetto, a sinistra della tastiera) dal quale dipende il codice lasciato in AL, corrispondente alternativamente a lettera maiuscolo o minuscolo
bulletin effetti la possibilità di conoscere questo stato è prevista dal nostro computer: basta osservare la lucina centrale (led) in alto a destra della tastiera; se è accesa la pressione di tasti letterali produce codici ascii maiuscoli e viceversa. Ma, come detto, istintivamente non ci si cura di controllare...
bulletquesta negligenza costa cara perchè ci troveremo a premere disperatamente lettere senza capire perchè non succede nulla; ora sai che devi provare a modificare lo stato del tasto Caps Lock, premendolo e tenendo d'occhio la luce del led.

  

bulletIl dramma sta nel fatto che questa competenza ora è certamente tua, amato frequentatore del mio sito, ma non del possibile utente del tuo progetto...
bulletE se l'eseguibile va in mano a gente meno provveduta?

  

bulletLa 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:

  

Console - Video & Tastiera

Esercizio FACILE Esercizio
NB: se il testo nell'Area  ti sembra strano
     
installa il  font
Giobe.TTF: clicca qui!!
Mostra l'Effetto Prova l'eseguibile COM Scarica il codice Sorgente ASM

  

bullet 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.

  

bulletVediamo in dettaglio le varie fasi:
bulletpoichè verrà modificato, per prima cosa si salva (in AH) il codice ascii sotto test, necessario per la stampa progressiva, nel caso appartenga ad un tasto letterale
bulletsubito dopo si opera una magia: si trasforma in maiuscola l'eventuale lettera minuscola, cioè si manipola il codice ascii in modo da forzare comunque il suo bit5 a 0
bulletl'operazione si esegue mascherando questo bit con l'aiuto dell'istruzione AND (AND AL,1101111B), cioè applicando a AL la maschera 110111112=DFH
bulletè facile verificare che (per esempio) il codice di 'a' (=61H=011000012) diventa quello di 'A' (=41H=010000012)
bulletcon questo artificio non è più necessario controllare lo stato del tasto Caps Lock: la pressione di un tasto letterale produrrà comunque un codice ascii associato a lettera maiuscola
bulletL'immediata conseguenza è che basta verificare un solo intervallo: quello compreso tra ''A' (codice 41H) e 'Z' (codice 5AH) delle lettere maiuscole:
bulletse è più grande dell'ultima lettera maiuscola, 'Z'=5AH (CMP AL,'Z', JA xxx02, Above) o più piccolo della prima lettera maiuscola, 'A'=41H (CMP AL,'A', JB xxx02, Below) non ci interessa

  

001FH   415AH   80FFH
Ascii di Controllo ..... 'A'÷'Z' ..... Ascii Estesi

<─ JB xxx02 NO ───┤

 

├──── NO JA xxx02 ──>

0÷31   65÷90   128÷255

               

Suggerimento 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.

  

bulletCon 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:

  

Scarica il file
EsA015.LST

    

Pagina Precedente Palestra Apprendisti Pagina Successiva Esercizio n° A015 3/4   Torna alla Home  della Palestra Assembly Lezioni - Vai al DownLoad dei files DOC Torna al Menu del "Tutorial"
78 di 157
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157

    

PALESTRA » Apprendisti » Es.001 Es.002 Es.003 Es.004 Es.005 Es.006 Es.007 Es.008 Es.009 Es.010 Es.011 Es.012
Es.013 Es.014 Es.015 Es.016 Es.017 Es.018 Es.019 Es.020 Es.021 Es.022 Es.023 Es.024
Es.025 Es.026 Es.027 Es.028 Es.029 Es.030 Es.031 Es.032 Es.033

| Che serve per iniziare | Prima compilazione | Livello Esperti |

TUTORIAL » Indirizzi Base | Registri Interni | Area Comunicaz. BIOS | Funzioni BIOS | Funzioni DOS
Prefazione | CAP 1 | CAP 2 | Schede | Palestra
Libreria ASM | Libreria MAC | Progetti ASM | Download | Info | Indice
Home 
Pascal|Manuali|Tabelle|Schede
Tutorial Assembly|Palestra Assembler
Aggiungi Giobe®2000 ai preferiti  
Motore
Ricerca
  Rendi Giobe®2000 pagina di Default
© 2001-2010  -  Studio Tecnico ing. Giorgio OBER
Tutti i diritti sono riservati