Tutorial Sezione Assembler

Dettaglio Istruzioni 

Le Schede del Tutorial

  Istruzioni della Cpu 80x86

SCHEDA n° 07 [I/ 044 di 198] 

    

    INS - Inserisce in una stringa il dato assunto da una porta (dispositivo)
     
bulletQuesta istruzione non appartiene al Set dell'8088/86; si usa solo con 80286/486.
bulletEssa trasferisce il dato assunto dalla porta specificata dal secondo operando (sorgente, per default DX) nel primo operando (destinazione), una o più locazioni di memoria consecutive (destinazione, per default puntata da ES:DI)  in funzione della dimensione dichiarata dalla pseudooperazione che segue la sua etichetta (DB per byte, DW per word o DD per doubleword, ma solo con 80386/486).
bulletIl nome della locazione destinazione 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 ES (e va dichiarato esplicitamente nell'istruzione), e non può essere cambiato (cioè non può essere forzata con nessun altro registro di segmento, con l'override).
bulletSe l'override ES: non viene scritto nell'istruzione l'assemblatore segnala errore perchè, come è noto, le etichette senza esplicita dichiarazione vengono compilate con riferimento al segmento DS, cosa impossibile in questo caso!
bulletNonostante la necessità di dichiarare l'operando destinazione (solo per motivi di corretta compilazione) i dati sono comunque scritti nella locazione puntata da ES:DI, per cui l'uso di questa istruzione ha senso solo se, in precedenza, il registro puntatore, DI, è stato inizializzato con la rispettiva etichetta specificata come operando, per esempio anticipando la INS ES:Tabel01,DX con LEA DI,Tabel01, vedi esempio successivo).
bulletIl secondo operando, sempre DX, esprime il nome della periferica coinvolta in lettura, 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 IN; il registro DX va caricato prima di effettuare l'input:
          
MOV  DX,0379H
INS  [Depo01],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):
         
INS  Destinazione, Sorgente
INS  Memoria, NomePorta
  Destinazione (ES:DI) << Sorgente  (dato)
 

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

INS

[Depo02],DX

no 5 15 17 1 1                     

INS

ES:[Depo02],DX

         
bulletLa tabella evidenzia che l'istruzione non modifica alcuna flag. La figura seguente mostra le risorse richieste da questa istruzione in funzione degli operandi coinvolti (leggi le istruzioni):
          

Addr

Codifica Masm

Istruzione


0100

0101
0103

55
55AA
55AA1188
      .386p
Depo01
DB   55H
Depo02 DB   55AAH
Depo04 DD   55AA1188H 
---- ---------------- ------- ----------------------
0107
0108
0109
6C
6D
66 6D

INS ES:[Depo01],DX
INS ES:[Depo02],DX
INS ES:[Depo04],DX
         
bulletE' interessante osservare che, comunque sia scritta,  al netto dell'eventuale byte di override, viene sempre codificata con il byte 6C  (se tratta bytes) o 6D (se tratta word).
bulletRiassumendo, in dettaglio l'istruzione si comporta in questo modo:
bulletIl dato prelevato dalla porta specificata da DX ha la dimensione di un byte, di una word o di una doubleword.
bulletil segmento dell'area Destinazione è per default, ES e l'offset è per default DI; non è possibile forzare un altro registro di segmento ed è necessario scrivere esplicitamente l'override ES:, per evitare che l'assemblatore creda che si voglia coinvolgere DS: (in altre occasioni assunto per default, se manca altra indicazione).
bulletper questo è assolutamente necessario inizializzare il registro DI (insieme alla flag DF) prima di utilizzarlo.
bulletdopo aver spostato il dato nella locazione aggiorna il valore del registro di offset (DI o EDI), 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) al puntatore viene sommato 1 (cioè è incrementato, se l'operando è un byte), 2 (se è una word) o 4 (se ha dimensione doubleword).
bulletse 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).
bullet la presenza dell'operando destinazione è 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).
bulletl'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è INSB, se i dati manipolati sono bytes, INSW se sono word, o INSD se doubleword.
bulletQuesta potente istruzione esegue con un solo codice operativo il compito di 3 istruzioni, cioè equivale all'esecuzione del seguente codice:
IN    AL,DX
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 lettura e spostamento dati  viene ripetuto automaticamente CX volte, con conseguente stoccaggio automatico di tutta l'area destinazione 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 20 20 20 20 20 20
20 20 20 20 20 20
20 20 20 20 20 20
Tabel   DB "                "
---- ---------------- ------- ----------------------
0112
0113
0116
011A
011D
011E
----
0120
0121
0124
0128
012B
FC
BA 0379
8D 3E 0100
B9 0012
6C
E2 FD
----------------
FC
BA 0379
8D 3E 0100
B9 0012
F3 6C




next:

-------




   REP
CLD
MOV  DX,0379H
LEA  DI,Tabel
MOV  CX,18
INS  ES:Tabel,DX
LOOP next
----------------------
CLD
MOV  DX,0379H
LEA  DI,Tabel
MOV  CX,18
INS  ES:Tabel,DX
     
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 delle locazioni destinazione si ritiene quello di default, ES (e quindi deve essere scritto esplicitamente).
bulletil contatore CX è stato caricato con la dimensione della tabella, cioè il numero dei suoi caratteri.
bulletil puntatore di periferica DX è assunto normalmente, con MOV.
bulletl'azione del LOOP copia i dati assunti dalla porta nella tabella vuota; alla fine conterrà i dati.
bulletPer confrontare i bytes compilati dall'assemblatore viene proposta anche la versione che utilizza 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 044 - INS

    

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