Tutorial Sezione Assembler

Dettaglio Istruzioni 

Le Schede del Tutorial

  Istruzioni della Cpu 80x86

SCHEDA n° 07 [I/ 102 di 198] 

    

    LODSD - Assume un dato a 32 bit da un'area di memoria (tabella)
     
bulletQuesta istruzione non appartiene al Set dell'8088/86; si usa solo con 80386/486.
bulletIl suo compito è quello di trasferire in EAX il dato a 32 bit (doubleword), assunto per default dalle locazioni di memoria puntata da DS:SI.
bulletL'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 LODSD con LEA SI,Tabel32, vedi esempio successivo).
bulletDa notare che la STOSD esegue il compito opposto della LODSD.
bulletLe sue caratteristiche sono riassunte nella seguente tabella (leggi le istruzioni Legenda della Tabella):
         
         LODSD   Destinazione (EAX) << Sorgente  (dato a 32 bit)
 

Esempio di Applicazione

Cicli di Clock Mem
Acces

Bytes
Flag   influenzate
Mnemonico Operandi 86 268 386 486 O D I T S Z A P C

LODSD

   

no no 5 5 1 1                     
         
bulletLa 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 32 bit; in dettaglio:
bulletIl dato prelevato dalla memoria (puntata da SI) ha la dimensione di una doubleword.
bulletil segmento dell'area Dati è sempre DS (cioè non è possibile forzare nessun altro registro di segmento, con l'override).
bulletdopo 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):
bulletse DF=0 (direzione in avanti) al puntatore viene sommato 4.
bulletse DF=1 (direzione indietro) al puntatore viene sottratto 4.
bullet la presenza di operandi non è necessaria: la lettera D posta dopo lo mnemonico LODS fa capire all'assemblatore che i dati da trattare sono a 32 bit.
bulletin 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.
bulletQuesta istruzione esegue con 2 codici operativi, 66H ADH, il compito di 2 istruzioni, cioè equivale all'esecuzione del seguente codice:
         
MOV   EAX,DS:[SI]
ADD   SI,4
     
bulletSebbene 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 32 bit, (doubleword) viene effettivamente letto in EAX automaticamente CX volte ma, data l'impossibilità di "consumarlo" viene sovrascritto, cioè inesorabilmente perso, rendendo inutile l'uso della auto ripetizione!
bulletData l'utilità di questa tecnica viene proposto un esercizio d'esempio:
         

Addr

Codifica Masm

Istruzione


0100

12345678
56789ABC
9ABCDEF0
        EXTRN Dwor2Asc:NEAR    
Tabel32
DD 12345678H
        DD 56789ABCH
        DD 9ABCDEF0H
---- ---------------- ------- ----------------------

010C
010D
0111
0114
0116
0119

FC
8D 36 0100
B9 0003
66 AD
E8 XXXX
E2 FA



next:

.386p
CLD
LEA SI,Tabel32
MOV CX,3
LODS
CALL Dwor2Asc
LOOP next
         
bulletL'analisi del codice suggerisce queste considerazioni:
bulletla presenza dell'istruzione CLD impone la lettura della memoria in avanti.
bullet per inizializzare l'offset SI del puntatore si è fatto uso l'uso dell'istruzione LEA.
bulletil segment si ritiene quello di default, DS.
bulleti dati trattati hanno la dimensione della doubleword, come si evince dalla direttiva DD, scritta dopo l'etichetta.
bulletil contatore CX è stato caricato con il numero di dati della tabella.
bulletla procedura Dwor2Asc appartiene alla libreria Giobe.ASM/LIB, dell'ambiente Assembler, ed è qui dichiarata EXTRN.
bulletl'azione del LOOP e della Dwor2Asc stampa a video, in sequenza, la traduzione Ascii dei numeri esadecimali doubleword assunti dalla memoria.

    

Pagina Precedente Scheda n° 07 Pagina Successiva Istruzioni Cpu 80x86 Torna al Menu delle Schede del "Tutorial" Lezioni - Vai al DownLoad dei files DOC Torna al Menu del "Tutorial"
Istruzione 102 - LODSD

    

SCHEDE » 1.Header EXE 2.PseudoOp MASM 3.Differenza tra Macro e Procedure
4.
Tabella Vettori 5.PSP 6.Stack 7.Istruzioni 80x86
8.La misura dell'Informazione 9.Numeri e Logica Binaria
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