|
Tutorial
|
Dettaglio Istruzioni |
|
|
 |
Istruzioni
della Cpu 80x86 |
SCHEDA n° 07 [I/
047
di 198] |
 |
|
INSW - Inserisce
in una stringa la Word assunta da una porta (dispositivo) |
|
 | Questa istruzione non
appartiene al Set dell'8088/86; si usa solo con 80286/486. |
 | Si tratta di una istruzione piuttosto
efficiente, nata per stoccare in una precisa area di
memoria, spesso detta stringa
e puntata per default da ES:DI, il dato
a 16 bit proveniente dal dispositivo d'ingresso 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
): |
|
INSW |
ES:DI <<
word dalla porta DX |
| |
|
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 |
INSW
|
|
no |
5 |
15 |
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 INS,
pur non dichiarandoli esplicitamente l'istruzione si accinge a leggere
dati a 16 bit; in dettaglio:
 | Il dato prelevato dalla porta (puntata da DX)
ha la dimensione di una word.
|
 | il segmento
dell'area Destinazione (usata per stoccare le words) è
sempre ES
(cioè non è possibile forzare nessun altro registro di segmento, con l'override). |
 | dopo aver provveduto alla memorizzazione 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):
 | 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 INS 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 ES:DI,
per cui è assolutamente necessario inizializzarlo (insieme alla flag DF)
prima di utilizzarle. |
|
 | Questa istruzione esegue con un solo
codice operativo, 6DH, il compito di 3 istruzioni,
cioè equivale all'esecuzione del seguente codice: |
IN
AX,DX
MOV ES:[DI],AX
ADD DI,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, words)
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
Depo02 DW 50 DUP (?) |
| ---- |
|
---------------- |
|
------- |
---------------------- |
0164
0165
0168
016C |
|
FC
B9 0032
8D 3E 0100
F3 6D |
|
REP |
CLD
MOV CX,50
LEA DI,Depo02
INSW |
|
 | L'analisi del codice suggerisce queste considerazioni:
 | prendiamo nota della tecnica con cui viene riservata memoria per le 2
aree da confrontare, con la pseudoistruzione
Dup. |
 | notiamo la presenza dell'istruzione CLD,
per imporre un'analisi in avanti. |
 | per inizializzare l'offset del puntatore si è fatto uso l'uso dell'istruzione LEA. |
 | il segment si ritiene quello di default, ES. |
 | il puntatore di periferica DX
è assunto normalmente, con MOV. |
 | il contatore CX è stato caricato con la dimensione
dell'area di destinazione e il prefisso REP
provvederà a ripetere automaticamente l'operazione. |
|
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|