Tutorial
|
Dettaglio Istruzioni |
Istruzioni della Cpu 80x86 |
SCHEDA n° 07 [I/ 123 di 198] |
|
![]() |
|
![]() | Questa istruzione sposta nel primo operando (destinazione, per default la locazione di memoria puntata da ES:DI) il dato assunto per default dalla locazione di memoria puntata da DS:SI (sorgente). |
![]() | Per funzionare correttamente è necessario specificare un operando sorgente, di solito l'etichetta del primo dei dati da trasferire nella locazione puntata da DS:SI; 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. |
![]() | Naturalmente se si desidera specificare anche l'etichetta della locazione in cui trasferire il primo dei dati, la dimensione deve essere coerente con quella sorgente, cioè un byte, una word o una 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 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 MOVS ES:Testo11,Testo01 con LEA SI,Testo01 e LEA DI,Testo11 , vedi esempio successivo). |
![]() | Le sue caratteristiche sono riassunte nella
seguente tabella (leggi le istruzioni
![]() |
MOVS Destinazione,Sorgente | ES:[DI] << DS:[SI] | |||||||||||||||
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 | ||
MOVS |
ES:[Depo01],[Depo11] |
18 | 5 | 7 | 7 | 2 | 1 | |||||||||
MOVS |
ES:[Depo02],[Depo12] |
26 |
![]() | 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 dalle etichette delle zone di memoria coinvolte, necessarie solo per evitare segnalazioni d'errore da parte dell'assemblatore: |
|
![]() | E' interessante osservare che, comunque sia scritta, al netto dell'eventuale byte di override, viene sempre codificata con il byte A4 (se tratta bytes) o A5 (se tratta word). | ||||||||||||||||||
![]() | Riassumendo, in dettaglio l'istruzione si
comporta in questo modo:
| ||||||||||||||||||
![]() | Questa 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 |
![]() | Prima 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 dati, CX, va caricato preventivamente. |
![]() | 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 proposta anche la versione che utilizza il prefisso REP. |
|
![]() |
Scheda n° 07 |
![]() |
Istruzioni Cpu 80x86 |
![]() |
![]() |
![]() |
||
Istruzione 123 - MOVS |
|
|
|
Home
![]() |
|
|||||||
|
Motore Ricerca |
|