|
Tutorial
|
Dettaglio Istruzioni |
|
|
 |
Istruzioni
della Cpu 80x86 |
SCHEDA n° 07 [I/
138
di 198] |
 |
|
OUTSW - Spedisce
ad una porta (dispositivo) una Word assunto da una stringa |
|
 | Questa istruzione non
appartiene al Set dell'8088/86; si usa solo con 80286/486. |
 | Si tratta di una istruzione piuttosto
efficiente, nata per assumere un dato a 16 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. |
 |
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... |
 | Le sue caratteristiche sono riassunte nella
seguente tabella (leggi le istruzioni
): |
|
OUTSW |
porta
DX << word dalla memoria 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 |
OUTSW
|
|
no |
5 |
14 |
17 |
1 |
1 |
|
|
|
|
|
|
|
|
|
 | Dalla 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 16 bit e a spedirli
alla porta; in dettaglio:
 | Il dato prelevato dalla memoria e spedito
alla porta specificata da DX ha la dimensione
di una word.
|
 | il segmento
dell'area Sorgente è
per default, DS e l'offset è per
default SI; è possibile
forzare un altro registro di segmento con l'override. |
 | 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 2. |
 | se DF=1
(direzione indietro) al puntatore viene sottratto 2. |
|
 | la presenza di
operandi non è necessaria: la lettera W
posta dopo lo mnemonico OUTS fa
capire all'assemblatore che i dati da trattare sono a 16
bit. |
 | in 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. |
|
 | Questa istruzione esegue con un solo
codice operativo, 6FH, il compito di 3 istruzioni,
cioè equivale all'esecuzione del seguente codice: |
MOV AL,DS:[SI]
OUT DX,AL
ADD SI,2 |
 | Prima di concludere è opportuno sottolineare che questa
istruzione può fruire dell'operatore di autoripetizione REP: anteponendolo al suo mnemonico il processo di
acquisizione dati (a 16 bit, bytes)
viene ripetuto automaticamente CX, con
conseguente aggiornamento automatico di tutta l'area di memoria; per il
corretto uso dei questo prefisso è dunque necessario caricare
preventivamente CX con il numero degli
input da eseguire. |
 | Data l'utilità di questa tecnica viene proposto un
esercizio d'esempio: |
|
Addr |
|
Codifica
Masm |
|
Istruzione |
|
0100 |
|
0032 [ ?? ] |
|
.386p
Tabel16 DW 50 DUP (?) |
| ---- |
|
---------------- |
|
------- |
---------------------- |
0164
0165
0168
016C
016F |
|
FC
BA 0378
8D 36 0100
B9 0032
F3 6F |
|
REP |
CLD
MOV DX,0378H
LEA SI,Tabel16
MOV CX,50
OUTSW |
|
 | L'analisi del codice suggerisce queste considerazioni:
 | prendiamo nota della tecnica con cui viene riservata memoria per
l'area da cui prelevare i dati, con la pseudoistruzione
Dup. |
 | la presenza dell'istruzione CLD
impone la lettura della memoria in avanti. |
 | per inizializzare l' offset SI
del puntatore si è fatto uso l'uso dell'istruzione LEA. |
 | il segment delle locazioni sorgente si ritiene quello di
default, DS
(e quindi può anche non essere scritto esplicitamente). |
 | il puntatore di periferica DX
è assunto normalmente, con MOV. |
 | il contatore CX è stato caricato con la dimensione
dell'area sorgente e il prefisso REP
provvederà a ripetere automaticamente l'operazione. |
|
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|