Tutorial Sezione Assembler

Dettaglio Istruzioni 

Le Schede del Tutorial

  Istruzioni della Cpu 80x86

SCHEDA n° 07 [I/ 186 di 198] 

    

    STOSW - Copia la Word AX in un'area di memoria.
     
bulletQuesta istruzione trasferisce nella locazione di memoria puntata da ES:DI  il dato a 16 bit (byte), assunto per default da AX.
bulletL'istruzione non ha operandi (la dimensione del dato da scrivere in memoria è prefissata per default) ma, per il suo corretto funzionamento, è necessario comunque inizializzare il registro DI con l'etichetta associata alla memoria in cui stoccare i dati, per esempio anticipando la STOSW con LEA DI,Tab_16, vedi esempio successivo).
bulletDa notare che la LODSW esegue il compito opposto della STOSW.
bulletLe sue caratteristiche sono riassunte nella seguente tabella (leggi le istruzioni Legenda della Tabella):
         
   STOSW   Destinazione (ES:[DI]) << Sorgente (AX)
 

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

STOSW

 

15 7 7 6 2 1                  
         
bulletLa tabella evidenzia che l'istruzione non modifica le flag e che è priva di operandi: in realtà, essendo un'applicazione particolare della STOS, pur non dichiarandoli esplicitamente l'istruzione coinvolge i dati a 16 bit presenti nella locazione messa a confronto con l'accumulatore;  in dettaglio:
bulletIl dato prelevato dall'accumulatore ha la dimensione di una word.
bulletil segmento dell'area Destinazione è per default, ES e l'offset è per default DI; non è possibile forzare un altro registro di segmento, con l'override.
bulletdopo aver prelevato il dato dall'accumulatore aggiorna il valore del registro di offset (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) al puntatore viene sommato 2..
bulletse DF=1 (direzione indietro) al puntatore viene sottratto 2.
bullet la presenza di operandi non è necessaria: la lettera W posta dopo lo mnemonico STOS 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 il puntatore ES:DI, per cui è assolutamente necessario inizializzarlo (insieme alla flag DF) prima di utilizzarle.
bulletQuesta potente istruzione esegue con un solo codice operativo il compito di 2 istruzioni, cioè equivale all'esecuzione del seguente codice:
     
MOV   ES:[DI],AX
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 copia dall'accumulatore viene ripetuto automaticamente CX volte, con conseguente scrittura automatica di tutta l'area di memoria; è tuttavia curioso notare che, per l'impossibilità di "aggiornare" il  dato a 16 bit (word) assunto da AX prima del giro successivo, la memoria coinvolta viene riempita (fill) con il medesimo valore, rendendo piuttosto particolare l'uso dell' auto ripetizione!; per il corretto uso dei questo prefisso è comunque necessario caricare preventivamente CX con il numero di trasferimenti da eseguire.
bulletViene proposto un esercizio d'esempio:
     

Addr

Codifica Masm

Istruzione

0100 0000
0000
0000
Tab_16  DW 0000H
        DW 0000H
        DW 0000H    
---- ---------------- ------- ----------------------
0106
0107
010B
010E
0111
0112
----
0114
0115
0119
011C
011F
FC
8D 3E 0100
B8 1000
B9 0003
AB
E2 FD
-----------------
FC
8D 3E 0100
B8 1000
B9 0003
F3 AB




next:

-------




   REP
CLD
LEA    DI,Tab_16
MOV    AX,1000H
MOV    CX,3
STOSW
LOOP   next
----------------------
CLD
LEA    DI,Tab_16
MOV    AX,1000H
MOV    CX,3
STOSW
     
bulletL'analisi del codice suggerisce queste considerazioni:
bulletla presenza dell'istruzione CLD impone la lettura della memoria in avanti.
bullet per inizializzare l'offset DI del puntatore si è fatto uso l'uso dell'istruzione LEA.
bulletil segment si ritiene quello di default, ES, e non può essere cambiato con l'override ES.
bulletil contatore CX è stato caricato con la dimensione della tabella e il prefisso REP provvederà a caricare automaticamente il medesimo dato, 1000H, predisposto il AX, fino all'esaurimento di tutti gli elementi.
bulletl'azione del LOOP riempie la tabella Tab_16 di word uguali a 1000H.
bulletPer confrontare i bytes compilati dall'assemblatore viene proposto anche un breve codice con 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 186 - STOSW

    

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