Tutorial Sezione Assembler

Dettaglio Istruzioni 

Le Schede del Tutorial

  Istruzioni della Cpu 80x86

SCHEDA n° 07 [I/ 126 di 198] 

    

    MOVSW - Sposta un dato a 16 bit da un'area di memoria ad un'altra (tabella)
     
bulletQuesta istruzione sposta nel primo operando (destinazione, per default la locazione di memoria puntata da ES:DI il dato a 16 bit (word) 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 MOVSW 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):
         
        MOVSW   ES:[DI] << DS:[SI]   Sorgente  (dato a 16 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

MOVSW

 

26 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 16 bit; in dettaglio:
bulletIl dato prelevato dalla locazione di memoria ha la dimensione di una word.
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 16 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) ai puntatori viene sommato 2.
bulletse DF=1 (direzione indietro) ai puntatori viene sottratto 2.
bullet la presenza di operandi non è necessaria: la lettera W posta dopo lo mnemonico MOVS fa capire all'assemblatore che i dati da trattare sono a 16 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   AX,DS:[SI]
MOV   ES:[DI],AX
ADD   SI,2
ADD   DI,2
     
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 words, CX, va caricato preventivamente.
bulletData l'utilità di questa tecnica viene proposto un esercizio d'esempio:
         

Addr

Codifica Masm

Istruzione

0100


0106
1234
5678
9ABC
0000
0000
0000
Tab_1_16 DW 1234H
         DW 5678H
         DW 9ABCH
Tab_2_16 DW 0000H
         DW 0000H
         DW 0000H
---- ---------------- ------- ----------------------
010C
010D
0111
0115
0118
0119
----
011B
011C
0120
0124
0127
FC
8D 36 0100
8D 3E 0106
B9 0003
A5
E2 FD
----------------
FC
8D 36 0100
8D 3E 0106
B9 0003
F3 A5




next:

-------




   REP
CLD
LEA SI,Tab_1_16
LEA DI,Tab_2_16
MOV CX,3
MOVSW
LOOP next
----------------------
CLD
LEA SI,Tab_1_16
LEA DI,Tab_2_16
MOV CX,3
MOVSW
         
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 della word, come si evince dalla direttiva DW, scritta dopo le etichette delle tabelle.
bulletil contatore CX è stato caricato con la dimensione della tabella, cioè il numero delle sue voci.
bulletl'azione del LOOP copia le words della prima tabella nella seconda, vuota; alla fine entrambe contengono gli stessi dati a 16 bit.
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 126 - MOVSW

    

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