Tutorial Sezione Assembler

Dettaglio Istruzioni 

Le Schede del Tutorial

  Istruzioni della Cpu 80x86

SCHEDA n° 07 [I/ 136 di 198] 

    

     OUTSB - Spedisce ad una porta (dispositivo) un Byte assunto da una stringa
     
bulletQuesta istruzione non appartiene al Set dell'8088/86; si usa solo con 80286/486.
bulletSi tratta di una istruzione piuttosto efficiente, nata per assumere un dato a 8 bit da una precisa area di memoria, puntata per default da DS:SI, e spedirlo verso il dispositivo d'uscita il cui nome esadecimale è indicato per default da DX.
         
Suggerimento Per le scelte fatte dai primi progettisti di personal computer (IBM compatibili) per pilotare le periferiche sono state utilizzate solo le prime 10 linee d'indirizzo, da ADD0 a ADD9; per questa ragione per i nomi dei dispositivi sono previsti solo i numeri da 0000H (0) a 03FFH (1023=210), sebbene DX consenta la specifica di numeri di gran lunga maggiori. solo i dispositivi più moderni cominciano a riferirsi a nomi al di fuori di questo range... 
     
bulletLe sue caratteristiche sono riassunte nella seguente tabella (leggi le istruzioni Legenda della Tabella):
         
              OUTSB  porta DX   << byte dalla memoria DS:SI
 

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

OUTSB

 

no 5 14 17 1 1                   
         
bulletDalla tabella si deduce che l'istruzione non influenza le flag e che è priva di operandi: in realtà, essendo un'applicazione particolare della OUTS, pur non dichiarandoli esplicitamente l'istruzione si accinge a leggere dalla memoria dati a 8 bit e a spedirli alla porta; in dettaglio:
bulletIl dato prelevato dalla memoria e spedito alla porta specificata da DX ha la dimensione di un byte.
bulletil segmento dell'area Sorgente è per default, DS e l'offset è per default SI; è possibile forzare un altro registro di segmento con l'override.
bulletdopo aver spedito il dato alla porta aggiorna il valore del registro di offset (SI o ESI), 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 OUTS 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 DS:SI, per cui è assolutamente necessario inizializzarlo (insieme alla flag DF) prima di utilizzarle.
bulletQuesta istruzione esegue con un solo codice operativo, 6EH, il compito di 3 istruzioni, cioè equivale all'esecuzione del seguente codice:
         
MOV   AL,DS:[SI]
OUT   DX,AL
INC   SI
     
bulletPrima di concludere è opportuno sottolineare che questa istruzione può fruire dell'operatore di autoripetizione REP: anteponendolo al suo mnemonico il processo di lettura e uscita dati (a 8 bit, bytes) viene ripetuto automaticamente CX volte, con conseguente copia automatica sulla porta di tutta l'area sorgente di memoria; naturalmente il numero di dati, CX, va caricato preventivamente.
bulletData l'utilità di questa tecnica viene proposto un esercizio d'esempio:
         

Addr

Codifica Masm

Istruzione


0100

0032  [ ??  ]
      .386p
Tabel08
DB    50 DUP (?)
---- ---------------- ------- ----------------------
0132
0133
0136
013A
013D
FC
BA 0378
8D 36 0100
B9 0032
F3 6E




REP
CLD
MOV   DX,0378H
LEA   SI,Tabel08
MOV   CX,50
OUTSB
         
bulletL'analisi del codice suggerisce queste considerazioni:
bulletprendiamo nota della tecnica con cui viene riservata memoria per l'area da cui prelevare i dati, con la pseudoistruzione Dup.
bulletla presenza dell'istruzione CLD impone la lettura della memoria in avanti.
bullet per inizializzare l' offset SI del puntatore si è fatto uso l'uso dell'istruzione LEA.
bulletil segment delle locazioni sorgente si ritiene quello di default, DS (e quindi può anche non essere scritto esplicitamente).
bulletil puntatore di periferica DX è assunto normalmente, con MOV.
bulletil contatore CX è stato caricato con la dimensione dell'area sorgente e il prefisso REP provvederà a ripetere automaticamente l'operazione.

    

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 136 - OUTSB

    

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