Tutorial Sezione Assembler

Dettaglio Istruzioni 

Le Schede del Tutorial

  Istruzioni della Cpu 80x86

SCHEDA n° 07 [I/ 046 di 198] 

    

     INSD - Inserisce in una stringa la Doubleword assunta da una porta (dispositivo)
     
bulletQuesta istruzione non appartiene al Set dell'8088/86; si usa solo con 80386/486.
bulletSi tratta di una istruzione piuttosto efficiente, nata per stoccare in una precisa area di memoria, spesso detta stringa e puntata per default da ES:EDI, il dato a 32 bit proveniente dal dispositivo d'ingresso 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):
         
              INSD ES:DI  << doubleword dalla porta DX
 

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

INSD

 

no 5 15 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 INS, pur non dichiarandoli esplicitamente l'istruzione si accinge a leggere dati a 32 bit; in dettaglio:
bulletIl dato prelevato dalla porta (puntata da DX) ha la dimensione di una doubleword.
bulletil segmento dell'area Destinazione (usata per stoccare le doublewords) è sempre ES (cioè non è possibile forzare nessun altro registro di segmento, con l'override).
bulletdopo aver provveduto alla memorizzazione aggiorna il valore del registro di offset 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 4.
bulletse DF=1 (direzione indietro) al puntatore viene sottratto 4.
bullet la presenza di operandi non è necessaria: la lettera D posta dopo lo mnemonico INS fa capire all'assemblatore che i dati da trattare sono a 32 bit.
bulletin tutti i casi non va dimenticato che questa istruzione usa per default il puntatore ES:EDI, per cui è assolutamente necessario inizializzarlo (insieme alla flag DF) prima di utilizzarle.
bulletQuesta istruzione esegue con i suoi codici operativi, 66 6DH, il compito di 3 istruzioni, cioè equivale all'esecuzione del seguente codice:
IN    EAX,DX
MOV   ES:[EDI],EAX
ADD   DI,4
     
bulletPrima di concludere è opportuno sottolineare che questa istruzione può fruire dell'operatore di autoripetizione REP: anteponendolo al suo mnemonico il processo di acquisizione dati (a 32 bit, doublewords) 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.
bulletData l'utilità di questa tecnica viene proposto un esercizio d'esempio:
         

Addr

Codifica Masm

Istruzione


0100

0032  [ ??  ]
      .386p
Depo04
DW    50 DUP (?)
---- ---------------- ------- ----------------------
01C8
01C9
01CC
01D1
FC
B9 0032
66 8D 3E 0100
F3 66 6D



REP
CLD
MOV   CX,50
LEA   EDI,Depo04
INSD
         
bulletL'analisi del codice suggerisce queste considerazioni:
bulletprendiamo nota della tecnica con cui viene riservata memoria per le 2 aree da confrontare, con la pseudoistruzione Dup.
bulletnotiamo la presenza dell'istruzione CLD, per imporre un'analisi in avanti.
bullet per inizializzare l'offset del puntatore si è fatto uso l'uso dell'istruzione LEA.
bulletil segment si ritiene quello di default, ES.
bulletil puntatore di periferica DX è assunto normalmente, con MOV.
bulletil contatore CX è stato caricato con la dimensione dell'area di destinazione 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 046 - INSD

    

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