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° A013 3/4 [69 di 157] 

               

Analisi del Codice · Analisi del Main Loop · Conclusioni

Acquisizione Caratteri - Aspetta pressione di soli tasti NUMERICI con eco - Messaggio d'errore
Analisi del Main Loop

               

           Aggiornato 12 febbraio 2007 - [nel sorgente Es013.ASM sostituito JG xxx02 con JA xxx02; ricompilare l'esercizio]
bulletData per spiegata la fase iniziale (Desktop) e finale (rientro al DOS) vediamo cosa succede nel Main Loop di EsA013.ASM:

  

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

  

bulletLa banale aggiunta di un messaggio di avviso, proposto in posizione fissa, sull'ultima riga dello schermo, crea un inaspettato fastidioso problema.
bulletse si premono solo tasti numerici, tutto va liscio e il problema non si manifesta: il carattere corrispondente al tasto viene posto, in sequenza sulla terza riga (riga2) del monitor, colonna dopo colonna
bulletma se premiamo (per esempio) una lettera la messa a video del messaggio (stampato sull'ultima riga, riga24) fa perdere la posizione di stampa corrente della sequenza di numeri: l'eventuale successiva pressione di tasto numerico pone il suo carattere sull'ultima riga (riga24), a destra del messaggio!!

  

bulletPerciò bisogna premere provvedimenti; la casella di testo mostra i punti di differenza:
bulletprima di entrare nel Main Loop si nota la predisposizione delle coordinate correnti iniziali, per la sequenza dei caratteri ascii autorizzati (quelli corrispondenti alla pressione dei solo tasti numerici)
bulletil compito di ricordare la riga e la colonna di stampa è affidato rispettivamente ai registri DH e DL, una scelta logica visto che il compito di fissare la posizione di stampa effettiva è affidato alla Macro M_CURSOR, a noi ben nota
bulletin questo modo si rende dinamica la posizione di stampa corrente dei possibili caratteri ascii numerici

  

bulletLa fase di acquisizione e di verifica è del tutto identica a quella del programma precedente:
bulleta livello xxx00 viene proposto il messaggio standard (M_msg Testo02,24,4,0FH) che informa sul tipo di tasti autorizzati
bulletl'esecuzione del programma viene fermata a livello xxx01 (CALL KEYwait), in attesa della pressione di un tasto qualunque
bulletsi rileva 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
bulletcon il noto algoritmo assembly (JA xxx02 ... JB xxx02, descritto nell'esercizio EsA012.ASM), si controlla se è stato premuto un tasto numerico

  

bulletLa prima differenza con il programma della volta precedente si ha se non è così: si salta a livello xxx02, dove, invece della banale emissione di un beep, si provvede a mostrare un messaggio (M_msg Testo03,..) sull'ultima riga a partire dalla colonna 4 (24,04) in bianco brillante su Rosso (4FH), come richiesto dalle specifiche in caso pressione di tasto non autorizzato.

  

bulletCon la prima differenza sorge anche il primo problema: come far sparire il messaggio dopo la sua proposta a video. La soluzione è piuttosto semplice, basta sovrascriverlo con quello standard proposto all'inizio:
bulletper consentirne la lettura è lasciato a video per 1 secondo (CALL Del_1000)
bulletil rientro nel Main loop avviene a livello xxx00 (JMP SHORT xxx00), prima della necessaria attesa tasti, proprio per ribadire la stampa del messaggio standard (M_msg Testo02,24,4,0FH) esattamente nella stessa posizione del (e quindi sopra al) messaggio d'errore, annullandone la visualizzazione
bulletnaturalmente per assicurare questo affetto è necessario che le due stringhe, Testo02  e Testo03, abbiano, oltre alla stessa posizione, anche la stessa lunghezza:

  

  

bulletMa anche se il tasto premuto è effettivamente numerico si ha una seconda differenza con il programma precedente:
bulletsi provvede ancora alla stampa del carattere corrispondente, ma prima si fissa dinamicamente la sua posizione (M_CURSOR DH,DL), affidandosi, come detto, al valore corrente dei registri DH e DL
bulletin questo modo essi saranno stampati sempre nella giusta posizione (CALL BIOchr1), nel colore desiderato (M_COLOR 0EH, giallo su nero), dato che anch'esso viene sporcato da quello del messaggio d'errore
bulletprima di rientrare in attesa tasti si prepara aggiornata la colonna di stampa dinamica, incrementando DL
bulletinfine si impone il rientro (JMP SHORT xxx01), direttamente in attesa della pressione di un altro tasto. (cioè senza la necessità di ribadire il messaggio standard, non necessario)

  

bulletAnche per questo esercizio ti ho preparato l'estratto del file Listato EsA013.LST, generato dall’assemblatore; con esso puoi provare una eventuale analisi in ambiente Debug:

  

Scarica il file
EsA013.LST

    

Pagina Precedente Palestra Apprendisti Pagina Successiva Esercizio n° A013 3/4   Torna alla Home  della Palestra Assembly Lezioni - Vai al DownLoad dei files DOC Torna al Menu del "Tutorial"
69 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