|
Tutorial
|
Dettaglio Istruzioni |
|
|
 |
Istruzioni
della Cpu 80x86 |
SCHEDA n° 07 [I/
103
di 198] |
 |
|
LODSW - Assume
un dato a 16 bit da un'area di memoria (tabella) |
|
 | Questa istruzione trasferisce
in AX il dato a
16 bit
(word), assunto per default dalle locazioni di memoria
puntata da DS:SI. |
 | L'istruzione non ha operandi (la dimensione
del dato da leggere è prefissata per default) ma, per il suo corretto
funzionamento, è necessario comunque inizializzare il registro
SI con l'etichetta associata ai dati da leggere,
per esempio anticipando la LODSW
con LEA
SI,Tabel16, vedi esempio successivo). |
 | Da notare che la STOSW
esegue il compito opposto della LODSW. |
 | Le sue caratteristiche sono riassunte nella
seguente tabella (leggi le istruzioni
): |
|
LODSW |
Destinazione (AX) << Sorgente (dato a 16 bit) |
| |
|
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 |
LODSW
|
|
16 |
5 |
5 |
5 |
1 |
1 |
|
|
|
|
|
|
|
|
|
 | La tabella evidenzia che l'istruzione non
modifica alcuna flag, ed essendo un'applicazione particolare della LODS,
pur non dichiarandoli esplicitamente, l'istruzione si accinge a leggere
dalla memoria
dati a 16 bit; in dettaglio:
 | Il dato prelevato dalla memoria (puntata da
SI)
ha la dimensione di un byte.
|
 | il segmento
dell'area Dati è
sempre DS (cioè non è possibile
forzare nessun altro registro di segmento, con l'override). |
 | dopo aver provveduto alla memorizzazione aggiorna il valore
del registro
di offset SI,
in funzione del valore della flag di direzione DF
(che va quindi predisposta con certezza
prima di iniziare il
confronto):
 | se DF=0
(direzione in avanti) al puntatore viene sommato 2. |
 | se DF=1
(direzione indietro) al puntatore viene sottratto 2. |
|
 | la presenza di
operandi non è necessaria: la lettera W
posta dopo lo mnemonico LODS fa
capire all'assemblatore che i dati da trattare sono a 16
bit. |
 | in tutti i casi non va dimenticato che
questa istruzione usa per default il puntatore DS:SI,
per cui è assolutamente necessario inizializzarlo (insieme alla flag DF)
prima di utilizzarle. |
|
 | Questa istruzione esegue con un solo
codice operativo, ADH, il compito di 2 istruzioni,
cioè equivale all'esecuzione del seguente codice: |
 | Sebbene sia possibile fruire dell'operatore di autoripetizione REP, anteponendolo allo mnemonico
dell'istruzione, questa pratica risulta in questo caso del
tutto inutile; il dato a 16 bit,
(word)
viene effettivamente letto in AX automaticamente
CX volte ma, data l'impossibilità di "consumarlo" viene sovrascritto, cioè
inesorabilmente perso, rendendo
inutile l'uso della auto ripetizione! |
 | Data l'utilità di questa tecnica viene proposto un
esercizio d'esempio: |
|
Addr |
|
Codifica
Masm |
|
Istruzione |
|
0100 |
|
1234
5678
9ABC |
|
EXTRN Wor2Asc:NEAR
Tabel16 DW 1234H
DW 5678H
DW 9ABCH |
| ---- |
|
---------------- |
|
------- |
---------------------- |
0106
0107
010B
010E
010F
0112 |
|
FC
8D 36 0100
B9 0003
AD
E8 XXXX
E2 FA
|
|
next:
|
CLD
LEA SI,Tabel16
MOV CX,3
LODSW
CALL Wor2Asc
LOOP next
|
|
 | L'analisi del codice suggerisce queste considerazioni:
 | la presenza dell'istruzione CLD
impone la lettura della memoria in avanti. |
 | per inizializzare l'offset SI del puntatore si è fatto uso l'uso dell'istruzione LEA. |
 | il segment si ritiene quello di default, DS. |
 | i dati trattati hanno la dimensione della word,
come si evince dalla direttiva DW,
scritta dopo l'etichetta. |
 | il contatore CX è stato caricato con
il numero di dati della tabella. |
 | la procedura
Wor2Asc
appartiene alla libreria
Giobe.ASM/LIB, dell'ambiente Assembler, ed è qui
dichiarata EXTRN. |
 | l'azione del LOOP e
della
Wor2Asc stampa a video, in
sequenza, la traduzione Ascii dei numeri
esadecimali word assunti dalla memoria. |
|
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|