| Questa istruzione non
appartiene al Set dell'8088/86; si usa solo con 80286/486. |
| Essa trasferisce alla porta
specificata dal secondo operando (destinazione, per default DX)
il
dato assunto da una o più locazioni di memoria
consecutive (sorgente, per default
puntata da DS:SI) la dimensione
delle quali dipende dalla pseudooperazione che segue la loro etichetta (DB per byte,
DW per word o DD per doubleword,
ma solo con 80386/486). |
| Il nome della locazione sorgente deve
dunque essere sempre fornito al fine di stabilire la
dimensione del dato da leggere dal dispositivo; in ogni caso il segmento di
riferimento per lo stoccaggio è sempre DS
e può essere cambiato con l'override. |
| Nonostante la necessità di dichiarare
l'operando destinazione (solo per motivi di corretta compilazione) i dati sono
comunque letti dalla locazione puntata da DS:SI, per
cui l'uso di questa istruzione ha senso solo se, in precedenza, il registro
puntatore, SI, è stato inizializzato con
la rispettiva etichetta specificata come operando,
per esempio anticipando la OUTS
DX,Tabel01
con LEA
SI,Tabel01 , vedi esempio successivo). |
| Il secondo operando, sempre DX,
esprime il nome
della periferica coinvolta in scrittura, cioè un numero intero da 0 a 65535 (da
0000H a FFFFH); non è possibile dunque passare un numero
immediato a 8 bit, come per l'istruzione OUT;
il registro DX va caricato prima di
effettuare l'input: |
| E' interessante osservare che, comunque sia scritta,
al netto dell'eventuale byte di override, viene
sempre codificata con il byte 6E (se
tratta bytes) o 6F
(se tratta word). |
| Riassumendo, in dettaglio l'istruzione si
comporta in questo modo:
| Il dato prelevato dalla memoria e spedito
alla porta specificata da DX ha la dimensione di un byte,
di una word o di
una doubleword. |
| il segmento
dell'area Sorgente è
per default, DS e l'offset è per
default SI; è possibile
forzare un altro registro di segmento con l'override. |
| per questo è assolutamente necessario inizializzare
il registro SI (insieme alla flag DF)
prima di utilizzarlo. |
| dopo 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):
| se DF=0
(direzione in avanti) al puntatore viene sommato 1 (cioè è
incrementato, se l'operando è un byte), 2 (se è una
word) o 4
(se ha dimensione doubleword). |
| se DF=1
(direzione indietro) al puntatore viene sottratto 1
(cioè è decrementato, se l'operando è un byte), 2 (se è una
word) o 4 (se ha dimensione doubleword). |
|
| la presenza dell'operando
sorgente è richiesta dalla sintassi
per consentire all'assemblatore di capire la dimensione
dei dati da trattare; esso deve dunque essere dichiarato con la specifica della
dimensione dei dati a cui fanno riferimento (Byte o
Word o Dword Ptr).
|
| l'assemblatore compila comunque questa istruzione con il medesimo unico byte di
codice operativo con cui tratta le istruzioni da essa derivate, tutte
prive di operando, cioè OUTSB,
se i dati manipolati sono bytes, OUTSW
se sono word, o OUTSD se
doubleword. |
|
| Questa potente istruzione esegue con un solo
codice operativo il compito di 3 istruzioni, cioè equivale all'esecuzione del seguente codice: |