Tutorial Sezione Assembler

Dettaglio Istruzioni 

Le Schede del Tutorial

  Istruzioni della Cpu 80x86

SCHEDA n° 07 [I/ 124 di 198] 

    

    MOVSB - Sposta un dato a 8 bit da un'area di memoria ad un'altra (stringa)
     
bulletQuesta istruzione sposta nel primo operando (destinazione, per default la locazione di memoria puntata da ES:DI il dato a 8 bit (byte) assunto per default dalla locazione di memoria puntata da DS:SI (sorgente).
bulletL'istruzione non ha operandi (la dimensione del dato da copiare è prefissata per default); i dati sono comunque assunti dalla locazione puntata da DS:SI e spostati in ES:DI, per cui l'uso di questa istruzione ha senso solo se, in precedenza, entrambi i registri puntatori, SI e DI, sono stati inizializzati con le rispettive etichette specificate come operandi, per esempio anticipando la MOVSB con LEA SI,Testo01 e LEA DI,Testo11 , vedi esempio successivo).
bulletLe sue caratteristiche sono riassunte nella seguente tabella (leggi le istruzioni Legenda della Tabella):
         
        MOVSB   ES:[DI] << DS:[SI]   Sorgente  (dato a 8 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

MOVSB

 

18 5 7 7 2 1                     
         
bulletLa tabella evidenzia che l'istruzione non modifica alcuna flag, ed essendo un'applicazione particolare della MOVS, pur non dichiarandoli esplicitamente, l'istruzione si accinge a spostare tra locazioni di memoria dati a 8 bit; in dettaglio:
bulletIl dato prelevato dalla locazione di memoria ha la dimensione di un byte.
bulletil segmento dell'area Destinazione è per default, ES e l'offset è per default DI.
bulletil segmento dell'area Sorgente è per default, DS e l'offset è per default SI
bullet non è possibile forzare (con l'override) registri di segmento diversi.
bulletdopo aver spostato il dato a 8 bit da una locazione all'altra aggiorna il valore dei entrambi i registri di offset (SI e DI), 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) i puntatori sono entrambi incrementati.
bulletse DF=1 (direzione indietro) i puntatori sono entrambi decrementati.
bullet la presenza di operandi non è necessaria: la lettera B posta dopo lo mnemonico MOVS fa capire all'assemblatore che i dati da trattare sono a 8 bit.
bulletin tutti i casi non va dimenticato che questa istruzione usa per default i puntatori DS:SI e ES:DI, per cui è assolutamente necessario inizializzarli (insieme alla flag DF) prima di utilizzarli.
bulletQuesta potente istruzione esegue con un solo codice operativo il compito di 4 istruzioni, cioè equivale all'esecuzione del seguente codice:
         
MOV   AL,DS:[SI]
MOV   ES:[DI],AL
INC   SI
INC   DI
     
bulletPrima di concludere è opportuno sottolineare che questa istruzione può fruire dell'operatore di autoripetizione REP: anteponendolo al suo mnemonico il processo di spostamento dati  viene ripetuto automaticamente CX volte, con conseguente copia automatica di tutta l'area sorgente di memoria; naturalmente il numero di coppie di bytes, CX, va caricato preventivamente.
bulletData l'utilità di questa tecnica viene proposto un esercizio d'esempio:
         

Addr

Codifica Masm

Istruzione

0100


0112
20 45 73 65 6D 70
69 6F 20 64 69 20
54 65 73 74 6F 20
20 20 20 20 20 20
20 20 20 20 20 20
20 20 20 20 20 20
Testo01 DB " Esempio di Testo "


Testo11 DB "                  "
---- ---------------- ------- ----------------------
0124
0125
0129
012D
0130
0131
----
0133
0134
0138
013C
013F
FC
8D 36 0100
8D 3E 0112
B9 0012
A4
E2 FD
----------------
FC
8D 36 0100
8D 3E 0112
B9 0012
F3 A4




next:

-------




   REP
CLD
LEA SI,Testo01
LEA DI,Testo11
MOV CX,18
MOVSB
LOOP next
----------------------
CLD
LEA SI,Testo01
LEA DI,Testo11
MOV CX,18
MOVSB
         
bulletL'analisi del codice suggerisce queste considerazioni:
bulletla presenza dell'istruzione CLD impone la lettura della memoria in avanti.
bullet per inizializzare gli offset SI e DI dei puntatori si è fatto uso l'uso dell'istruzione LEA.
bulleti segment dei dati sorgente e destinazione sono impliciti, rispettivamente DS e ES.
bulleti dati trattati hanno la dimensione del byte, come si evince dalla direttiva DB, scritta dopo le etichette delle stringhe.
bulletil contatore CX è stato caricato con la dimensione della stringa, cioè il numero dei suoi caratteri.
bulletl'azione del LOOP copia i bytes della prima stringa nella seconda, vuota; alla fine entrambe contengono lo stesso messaggio.
bulletPer confrontare i bytes compilati dall'assemblatore viene proposta anche la versione che utilizza il prefisso REP.

    

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 124 - MOVSB

    

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