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

INTRODUZIONE [1 di 23] 

               

Analisi del Codice · Conclusioni

Acquisizione Caratteri - Gestione completa della pressione di Tasti
Analisi del Codice Sorgente [3 di 3]

               

bulletRimane da descrivere il servizio ServFunz, attivato dalla pressione di tasti di funzione o funzionali; si tratta di una parte molto cospicua, che ti puoi godere in tutto il suo splendore facendo scorrere la barra laterale della seguente casella di testo:

  

Gestione della Tastiera

Esercizio MOLTO 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

  

bulletPer ciascuno dei possibili 22 tasti viene imposto un semplice rientro a monte (a livello Servizio) per stampare il messaggio loro associato e tornare subito in attesa di altri tasti, come avveniva per i 4 tasti Ascii di controllo.

  

bulletNiente di nuovo, dunque! Tuttavia in questa parte di codice c'è un dettaglio di grande rilevanza, in grado di crearti grossi problemi se non affrontato di petto.

  

Ricorda...

NB: quando un'istruzione di salto condizionato tenta di raggiungere un indirizzo troppo lontano (più giù di 128 bytes e più su di 127) l'assemblatore non è in grado di compilare l'istruzione e segnala errore: error A2053: Jump out of range by nnn byte(s)

  

bullet

La situazione è molto probabile quando ci sono molti salti condizionati (e questo è proprio il caso...) perchè il numero di bytes tra i primi e gli ultimi rischia fortemente di essere superiore ai fatidici 128.

  

bullet

Ne consegue che i primi non ce la fanno...

  

bullet

Ma la soluzione è semplice: per evitare questo errore basta  invertire la logica .

  

bullet

Le prime quaterne di istruzioni della casella precedente illustrano tipicamente questa situazione; con riferimento alla prima il suo compito è saltare a Servizio se il confronto (CMP AH,F1) ha dato esito positivo, cioè se AH è uguale a F1.

bullet

In condizioni normali basterebbero 3 istruzioni:

  

  

bullet

Ma se il salto a Servizio non è possibile (perchè fuori range, corrispondente ad un indirizzo troppo lontano) bisogna provvedere all'inversione della logica; il codice diventa:

  

  

bullet Cioè: se il confronto (CMP AH,F1) non ha dato esito positivo  (JNZ), cioè se AH è diverso a F1, salta sotto (JNZ Serv00), per la successiva indagine; altrimenti (nel caso opposto, quello di prima fuori range) salta regolarmente (JMP Servizio) a Servizio.
bullet La cosa è possibile perchè il salto incondizionato (JMP) non è soggetto a limiti.

    

Pagina Precedente Palestra Esperti Pagina Successiva INTRODUZIONE   Torna alla Home  della Palestra Assembly Lezioni - Vai al DownLoad dei files DOC Torna al Menu del "Tutorial"
1 di 23
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

    

PALESTRA » Esperti » Es.001 Es.002 Es.003 Es.004 Es.005 Es.006 Es.007 Es.008 Es.009 Es.010 Es.011

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

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