Tutorial Sezione Assembler

Dettaglio Istruzioni 

Le Schede del Tutorial

  Istruzioni della Cpu 80x86

SCHEDA n° 07 [I/ 184 di 198] 

    

    STOSB - Copia il Byte AL in un'area di memoria.
     
bulletQuesta istruzione trasferisce nella locazione di memoria puntata da ES:DI  il dato a 8 bit (byte), assunto per default da AL.
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 STOSB con LEA DI,Testo01, vedi esempio successivo).
bulletDa notare che la LODSB esegue il compito opposto della STOSB.
bulletLe sue caratteristiche sono riassunte nella seguente tabella (leggi le istruzioni Legenda della Tabella):
         
          STOSB    Destinazione (ES:[DI]) << Sorgente (AL)
 

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

STOSB

 

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 8 bit presenti nella locazione messa a confronto con l'accumulatore;  in dettaglio:
bulletIl dato prelevato dall'accumulatore ha la dimensione di un byte.
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) il puntatore viene incrementato.
bulletse DF=1 (direzione indietro) il puntatore viene decrementato.
bullet la presenza di operandi non è necessaria: la lettera B posta dopo lo mnemonico STOS 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 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],AL
INC   DI
     
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 8 bit (byte) assunto da AL 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 20 45 73 65 6D 70
69 6F 20 64 69 20
54 65 73 74 6F 20
Testo01 DB " Esempio di Testo "
---- ---------------- ------- ----------------------
0112
0113
0117
0119
011C
011D
----
011F
0120
0124
0126
0129
FC
8D 3E 0100
B0 2A
B9 0012
AA
E2 FD
-----------------
FC
8D 3E 0100
B0 2A
B9 0012
F3 AA




next:

-------




   REP
CLD
LEA    DI,Testo01
MOV    AL,'*'
MOV    CX,18
STOSB
LOOP   next
----------------------
CLD
LEA    DI,Testo01
MOV    AL,'*'
MOV    CX,18
STOSB
     
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 stringa da riempire, cioè con il numero dei suoi caratteri
bulletl'azione del LOOP riempie la stringa Testo01 di asterischi, '*'.
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 184 - STOSB

    

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