|
Tutorial
|
Dettaglio Istruzioni |
|
|
 |
Istruzioni
della Cpu 80x86 |
SCHEDA n° 07 [I/
197
di 198] |
 |
|
XLATB - Estrae
in accumulatore il dato di una Tabella |
|
 | Questa istruzione estrae
il dato a 8 bit dalla locazione di memoria
puntata da DS:[BX+AL] e lo memorizza
nell'accumulatore AL: ovviamente il
valore originale di AL viene perduto. E' la stessa istruzione denominata XLAT. |
 | In pratica questa magica istruzione utilizza
il numero senza segno di AL come offset,
al fine di indirizzare dinamicamente una delle locazioni (al massimo 256)
della tabella puntata da DS:BX. |
 | Se il puntatore all'inizio della tabella è
quello di default (DS:BX) non è necessario
specificare un operando. |
 | Se, come operando, si specifica l'etichetta
di una locazione di memoria, essa è riferita per default al
segmento DS; è comunque possibile
forzare un altro registro di segmento, con l'override. |
 | Naturalmente l'uso di questa istruzione ha senso solo se, in
precedenza:
 | il registro BX
(o EBX) è stato inizializzato con l'etichetta
che individua il primo dato della tabella. |
 | il registro AL
indica il numero d'ordine (la posizione in tabella) del dato desiderato. |
|
 | Per esempio anticipando la XLATBcon LEA
BX,Tabella e MOV
AL,12, vedi esempio successivo). |
 | Le sue caratteristiche sono riassunte nella
seguente tabella (leggi le istruzioni
): |
|
XLATB Puntatore |
Accumulatore << dato contenuto in DS:[BX+AL] |
| |
|
Esempio
di Applicazione |
Cicli
di Clock |
Mem
Acces |
N°
Bytes |
Flag
influenzate |
| Mnemonico |
Operandi |
86 |
268 |
386 |
486 |
O |
D |
I |
T |
S |
Z |
A |
P |
C |
XLATB
|
|
11 |
5 |
5 |
4 |
1 |
1 |
|
|
|
|
|
|
|
|
|
XLATB
|
[Depo01]
|
XLATB
|
CS:[Depo01]
|
 | La tabella evidenzia che l'istruzione non
modifica alcuna flag. La figura seguente mostra le risorse
richieste da questa istruzione in funzione degli operandi
coinvolti (leggi le
istruzioni): |
|
Addr |
|
Codifica
Masm |
|
Sequenza
Bytes |
|
Istruzione |
|
| 0100 |
|
55 |
|
55 |
|
Tabella |
DB 55H |
| ---- |
|
---------------- |
|
----------------- |
|
------- |
---------------------- |
0101
0102
0103
0105
0107 |
|
D7
D7
2E D7
26 D7
36 D7 |
|
D7
D7
2E D7
26 D7
36 D7 |
|
|
XLATB
XLATB [Tabella]
XLATB CS:[Tabella]
XLATB ES:[Tabella]
XLATB SS:[Tabella] |
|
 | In pratica questa istruzione si comporta come
l'istruzione:
|
 | Sebbene la sua struttura sia piuttosto originale, si
comprende l'utilità di questa istruzione: offre lo strumento
ideale per convertire dati da un tipo ad un altro. |
 | L'esercizio d'esempio mostra come sia facile
trasformare un valore esadecimale 0xH
(da 00H a 0FH) nel
corrispondente simbolo Ascii (da 30H='0'
a 39H='9' e
da 41H='A'
a 46H='F'): |
|
Addr |
|
Codifica
Masm |
|
Istruzione |
|
|
0100 |
|
30 31 32 33 34 35
36 37 38 39 41 42
43 44 45 46 |
|
Tabella DB "0123456789ABCDEF" |
| ---- |
|
---------------- |
|
------- |
---------------------- |
0110
0112
0116
----
0117
0119
011D |
|
B0 09
8D 1E 0100
D7
----------------
B0 09
8D 1E 0100
D7 |
|
-------
|
MOV
AL,09H
LEA BX,Tabella
XLATB Tabella
----------------------
MOV AL,09H
LEA BX,Tabella
XLATB |
|
 | L'analisi del codice suggerisce queste considerazioni:
 | per inizializzare l'offset BX
del puntatore all'inizio della tabella si è fatto uso l'uso dell'istruzione LEA. |
 | il segment si ritiene quello di default, DS. |
 | l'istruzione XLATB è compilata allo stesso modo, sia che l'etichetta venga dichiarata sia
al contrario. |
|
 | Dopo l'esecuzione delle 3 istruzioni in AL
c'è il valore esadecimale 39H, che corrisponde
al carattere Ascii '9' |
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|