|
Sezione |
Indirizzi Base
Registri Interni
|
| Palestra Livello Apprendisti Livello Esperti |
| Programmare in Assembly |
INTRODUZIONE [1 di 23] |
|
|
|
||
| Acquisizione Caratteri - Gestione completa della pressione di Tasti | ||
| Analisi del Codice Sorgente [3 di 3] |
|
|
| Rimane 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: |
|
|
|
|
|
Esercizio |
NB: se il testo nell'Area
ti
sembra strano installa il font Giobe.TTF: clicca qui!! |
|
|
|
|
|
| Per 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. |
|
|
| Niente 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. |
|
|
|
|
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) |
|
|
|
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. |
|
|
|
Ne consegue che i primi non ce la fanno... |
|
|
|
Ma la soluzione è semplice: per evitare questo errore basta invertire la logica . |
|
|
|
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. | |
|
In condizioni normali basterebbero 3 istruzioni: |
|
|
|
|
|
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: |
|
|
|
|
| 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. | |
| La cosa è possibile perchè il salto incondizionato (JMP) non è soggetto a limiti. |
|
|
|
Palestra Esperti |
|
INTRODUZIONE |
![]() |
![]() |
![]() |
||
| 1 di 23 |
|
|
|
|
|
|
Home
|
|
|||||||
|
Motore Ricerca |
|