Tutorial |
Dettaglio Istruzioni |
Istruzioni della Cpu 80x86 |
SCHEDA n° 07 [I/ 100 di 198] |
|
|
Questa istruzione trasferisce nel primo operando (destinazione, per default l'accumulatore) il dato assunto dalla locazione di memoria puntata da DS:SI. | |
Per funzionare correttamente è necessario specificare un operando sorgente, di solito l'etichetta del primo dei dati da trasferire in accumulatore; in questo modo l'assemblatore è in grado di stabilire la dimensione del dato da assumere dalla memoria; se l'operando non viene aggiunto l'assemblatore segnala errore. | |
In questo modo è chiara anche la dimensione del registro (accumulatore) di destinazione, cioè AL se il dato letto è un byte, AX se word e EAX se doubleword (con processori 80386/486). | |
Nonostante la necessità di dichiarare l'operando sorgente (solo per motivi di corretta compilazione) i dati sono comunque assunti dalla locazione puntata da DS:SI, per cui l'uso di questa istruzione ha senso solo se, in precedenza, il registro SI è stato inizializzato con l'etichetta usata come operando, per esempio anticipando la LODS Testo01 con LEA SI,Testo01, vedi esempio successivo). | |
Da notare che la STOS esegue il compito opposto della LODS. | |
Le sue caratteristiche sono riassunte nella seguente tabella (leggi le istruzioni ): |
LODS Memoria | Destinazione (Accumulatore) << Sorgente (dato) | |||||||||||||||
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 | ||
LODS |
[Depo01] |
12 | 5 | 5 | 5 | 1 | 1 | |||||||||
LODS |
[Depo02] |
16 |
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)
e sottolinea l'assoluta indipendenza del
codice generato dall'etichetta
della zona di memoria coinvolta, necessaria solo per evitare segnalazioni
d'errore da parte dell'assemblatore:
|
Riassumendo, in dettaglio l'istruzione si
comporta in questo modo:
| |||||||||||||||
Questa potente istruzione esegue con un solo
codice operativo il compito di 2 istruzioni, cioè equivale all'esecuzione del seguente codice: |
MOV
AL,DS:[SI] INC SI |
Prima di concludere è opportuno sottolineare che questa istruzione può fruire dell'operatore di autoripetizione REP: anteponendolo al suo mnemonico il processo di acquisizione dati (a 8 bit, bytes) viene ripetuto automaticamente CX, da caricare preventivamente, con conseguente lettura automatica di tutta l'area di memoria; è tuttavia curioso notare che, data l'impossibilità di "consumare" il dato assunto in AL prima del giro successivo, esso viene sovrascritto, cioè inesorabilmente perso, rendendo inutile l'uso dell'autoripetizione! | ||
Data l'utilità di questa tecnica viene proposto un
esercizio d'esempio: |
|
L'analisi del codice suggerisce queste considerazioni:
| |||||||||||||
Per confrontare i bytes compilati dall'assemblatore viene proposto anche un breve codice con l'inutile prefisso REP: l'azione di lettura è ripetuta automaticamente, ma i dati sono tutti perduti... |
|
Scheda n° 07 | Istruzioni Cpu 80x86 | |||||||
Istruzione 100 - LODS |
|
|
|
Home |
|
|||||||
|
Motore Ricerca |
|