Caricare documenti e articoli online 
INFtub.com è un sito progettato per cercare i documenti in vari tipi di file e il caricamento di articoli online.


 
Non ricordi la password?  ››  Iscriviti gratis
 

IL PROCESSORE 8086 - IL MICROPROCESSORE 8086

informatica




IL PROCESSORE 8086



1.1 INTRODUZIONE


Questo documento illustra le caratteristiche del microprocessore 8086. In particolare gli argomenti trattati sono:

Il microprocessore 8086



Sistemi ed interfacce del modo minimo e massimo

Architettura interna del microprocessore 8086

Il generatore di clock 8284 e il ciclo di bus dell' 8086

Esecuzione dell'istruzione nel sistema 8086


1.2 IL MICROPROCESSORE 8086


L'8086, annunciato per la prima volta nel 1978, fu il primo microprocessore a 16-bit introdotto dall' Intel Corporation. Ad esso sono seguiti altri componenti come il microprocessore 8088, il coprocessore numerico 8087, e il processore 8089 I/O.

L'8086 è fabbricato usando tecnologia metallo-ossido-semiconduttori ad alte-prestazioni (HMOS) e il numero di circuiti nel chip è approssimativamente eqivalente a 29,000 transistor. Esso è racchiuso in un contenitore a 40-pin come mostrato in figura 2.1. Molti dei suoi pin hanno funzioni multiple. Per esempio, le linee indirizzi A0 - A15 e le linee bus dati D0 - D15 utilizzano gli stessi pin. Per questa ragione, questi comandi sono etichettati AD0 - AD15.

L'8086 è un vero microprocessore con trasferimenti dati interni ed esterni a 16-bit. Puo' indirizzare fino a 1Mbyte di memoria attraverso un bus indirizzi a 20 bit e fino a 64k byte o 32K word porte di I/O.


1.3 MODO MINIMO E MASSIMO DI FUNZIONAMENTO


Il microprocessore 8086 può essere configurato per lavorare in 2 modi diversi: modo minimo e modo massimo.

Il modo minimo viene selezionato applicando il valore logico 1 al comando di ingresso MN/MX. I sistemi basati sul modo minimo sono tipicamente più piccoli e contengono un solo microprocessore. Ponendo il valore logico 0 sul pin MN/MX si seleziona il modo massimo. Questo configura l' 8086 per l'uso con processori multipli in modo da soddisfare meglio diverse esigenze.

A seconda del modo di funzionamento alcuni pin hanno significati diversi.


(Guidolin)

PAG. 16

Come mostrato in figura 2.1 , le funzioni dei pin specificati fra parentesi sono quelle che riguardano un sistema in modo massimo .

L' elenco completo dei segnali, comuni, del modo minimo e del modo massimo e' nelle figure 2.2(a),(b),e (c) , rispettivamente, dove sono riportati il nome , la funzione e il tipo per ogni segnale . Per esempio, il segnale RD è nel gruppo comune ed e'utilizzato come segnale di controllo della lettura: segnala alla memoria o all' interfaccia di I/O quando il bus di sistema dell' 8086 è pronto per l' ingresso dei dati .



(Malosso pag 17)



Inoltre, si noti che i segnali hold request (HOLD) e hold acknowledge (HOLDA) sono utilizzati solo in modo minimo. Se l' 8086 e' impostato per funzionare in modo massimo i due segnali sono sostituiti dalle linee request/grant del bus (RQ/GT) (RQ/GT)



1.4 INTERFACCIA DI MODO MINIMO


Quando e' impostato in funzionamento in modo minimo , l'8086 stesso provvede a generare tutti i segnali necessari per gestire la memoria e l' I/O .

La figura 2.3 mostra un diagramma a blocchi della configurazione di modo minimo dell'8086.

I segnali di modo minimo possono essere raggruppati in segnali per bus di indirizzi e dati , segnali di stato, segnali di controllo, segnali di interrup e DMA. Per semplicita', nel disegno le linee con doppio significato sono rappresentate come indipendenti.



( Furlanetto pag.17)


BUS INDIRIZZI E BUS DATI


Analizziamo dapprima i bus indirizzi e dati. In un sistema 8086 queste linee adempiono a due funzioni. Come bus indirizzi sono usate per indirizzi alla memoria e alle porte I/O.

Il bus indirizzi è lungo 20 bit e le linee che portano i segnali sono indicate con A0 - A19. A19 rappresenta il bit più significativo (MSB) e A0 il meno significativo (LSB). Un indirizzamento a 20 bit permette all'8086 di accedere ad 1 Megabyte di memoria ed ad uno spazio di I/O indipendente di 64K.

Le 16 linee del bus dati (da D0 a D15) sono condivise con le rispettive linee indirizzi da A0 ad A15. Cioe' il bus lavora come un bus indirizzi durante un intervallo di tempo, e come bus dati in un altro intervallo di tempo.

D15 è il più significativo (MSB) e D0 il meno significativo (LSB).

Quando funziona come bus dati, queste linee portano dati scritti e letti dalla memoria, dati I/O per i dispositivi di I/O, e codici di tipo interruzioni da un controllore di interruzioni.




(Tonello)

PAGINA 18/19(SOLO 2° CAPORIGA)


SEGNALI DI STATO

Anche le quattro linee di indirizzo più significative, A19 - A16 sono condivise con i segnali di stato S6 - S3. Questi bit di stato sono presenti in uscita sul bus contemporaneamente al dato. I bit S4 e S3 identificano quale registro di segmento interno del 8086 è usato per generare l' indirizzo fisico presente sul bus indirizzi durante il ciclo di bus corrente. La codifica dei registri e' rappresentata in figura 2.4. Si noti che il codice S3,S4 = 00 identifica un registro conosciuto come extra segment come fonte dell' indirizzo di segmento.

La lineea di stato S5 rappresenta il livello logico del flag interno di abilitazione degli interrupt. L'ultimo bit di stato S6 è sempre a livello logico 0.


SEGNALI DI CONTROLLO

I segnali di controllo hanno il compito di gestire 343e41d l'interfaccia di memoria e di I/O. Indicano ad esempio quando sul bus e' presente un indirizzo valido o in quale direzione il dato deve essere trasferito nel bus, quando e' presente un dato per la scrittura o la lettura sul bus dati. Per esempio, address latch enable(ALE) (indirizzo abilitato) è un impulso che se posto ad 1 segnala alla circuiteria esterna quando c' e' un indirizzo valido sul bus .Questo indirizzo deve essere memorizzato nella circuiteria esterna durante la transizione da 1 a 0 del segnale ALE.

Un altro segnale di controllo prodotto durante il ciclo di bus è BHE (bank hight enable)(banco di memoria alto abilitato). Il valore logico 0 su questa linea è usato per abilitare il byte piu' significativo del bus dati, tra D8 e D15. Questa linea ha anche la funzione di segnalatore di stato S7.




(Castellano pag. 19)



Usando le linee M/IO(Memoria /IO) e DT/R (dati trasmessi/ricevuti) , l'8086 segnala quale tipo di ciclo di bus è in fase di esecuzione e in quale direzione i dati devono essere trasferiti sul bus. Il livello logico di M/IO indica ai dispositivi esterni se sta per iniziare sul bus un trasferimento da/verso la memoria o l' I/O. Il livello logico 1 segnala una operazione di memoria e il livello logico 0 un'operazione di I/O. La direzione dei dati trasferiti sul bus è segnalata dal livello logico del segnale DT/R. Quando questa linea è a livello logico 1 durante la parte di trasferimento dei dati di un ciclo bus , il bus è nel "modo di trasmittente". Quindi, i dati sono scritti in memoria o nel dispositivo di output. Se il livello logico del DT/R e' 0, segnala che il bus è nel "modo ricevente". Questo corrisponde a leggere i dati dalla memoria o dall'ingresso. I segnali leggi (RD) e scrivi (WR) , indicano rispettivamente che un ciclo di bus di lettura o scittura è in fase di esecuzione. L'8086 mette WR a livello logico 0 per segnalare ai dispositivi esterni che e' ci sono dati validi nel bus. Invece RD indica che l'8086 sta eseguendo una lettura di dati dal bus. Durante le operazioni di lettura , e' attivo anche un altro segnale di controllo DEN (abilitazione dati): esso segnala ai dispositivi esterni quando possono depositare i dati nel bus.

Infine, nelle operazioni di I/O è anche il segnale di lettura. Esso può essere usato per inserire stati di attesa nel ciclo bus che possono durare diversi periodi di clock. Questo segnale e' prodotto da un generatore esterno e puo' essere utilizzato dalla memoria o da dispositivi di I/O per segnalare all'8086 quando essi sono pronti per completare il trasferimento dei dati.



SEGNALI DI INTERRUPT


I segnali di interrup sono 2: segnale per le interruzioni richieste (INTR) e quello per le interruzioni riconoscute (INTA) . INTR è in input all' 8086 e può essere usato da un dispositivo esterno per segnalare che necessita di essere servito.


(Fantinato-Saretta -Anonimo pag. 20)

Questo segnale è controllato nell'ultimo periodo di clock di ciascun ciclo di istruzione.

Il valore logico 1 su INTR rappresenta una richiesta di interrupt attiva.

Quando una richiesta di interupt è stata riconosciuta dall'8086 esso indica questo evento ai circuiti esterni con un impulso al valore logico 0 sul pin INTA.

Anche il segnale TEST, in input, e'utilizzato per la gestione degli interrupt. L' esecuzione di una istruzione di WAIT nell' 8086 controlla il livello logico del segnale TEST.

Se il valore logico è 1 il mP sospende l'esecuzione ed entra in quello che è conosciuto come stato di IDLE .

L' 8086 non esegue istruzioni ma controlla continuamente il segnale di TEST in attesa che passi al valore logico 0.

Non appena TEST assume il valore 0, riprende lésecuzione della istruzione successiva.

Questa caratteristica può essere usata per sincronizzare operazioni interne dell'8086 con un evento hardware esterno.

Ci sono due ulteriori segnali di input : l'interupt non mascherabile (NMI) e l'interupt di reset (RESET). Nella transizione dal livello 0 al livello 1 dell' NMI il controllo passa ad una routine di servizio dell' interupt non mascherabile .

Il RESET è usato per inizializzare l' hardware dell' 8086. Ponendo RESET a valore logico 0 vengono inizializzati i registri interni dell'8086 e avviata una routine di servizio per l' azzeramento hardware.


SEGNALI DI INTERFACCIA DEL DMA


I segnali per l' accesso diretto alla memoria, nel modo minimo del sistema dell'8086 consiste nei segnali segnali HOLD e HLDA.

Quando un dispositivo esterno vuole prendere il controllo del bus di sistema , segnala questo evento all'8086 settando l' HOLD al valore logico 1.

Al completamento del ciclo corrente del bus , l'8086 entra nello stato di HOLD.

con le linee di segnali l'AD0 - AD15, AD16/S3 - AD19/S6 , BHE, M/IO, DT/R,QD,WR,DEN e INTR tuttenello stato di alta impedenza

L'8086 segnala ai dispositivi esterni che e'in questo stato portando al valore logico 1 la linea HOLDA.


2.5 FUNZIONAMENTO IN MODO MASSIMO


Quando l'8086 è impostato per il funzionamento in modo massimo genera dei segnali per lavorare in un ambiente multiprocessore/coprocessore.

Con "ambiente multiprocessore " si intende che più processori stanno eseguendo il loro proprio programma. Di solito in questo caso ci sono alcune risorse di sistema comuni a tutti i processori chiamate risorse globali.

Altre risorse, assegnate ad ogni specifico processore sono chiamate risorse locali o private.

"Ambiente coprocessore" significa che c'è un secondo processore nel sistema.

In questo caso i due processori non accedono al bus nello stesso momento, uno passa il controllo del bus di sistema all'altro e sospende le sue operazioni.

Nel modo massimo ci sono funzioni per allocare le risorese globali e per passare il controllo del bus ad altri microcomputer o processori.



(Milani G.- pag.21- 7gg ritardo))


Guardando il diagramma a blocco del modo massimo in figura 2.5 noi vediamo che l'8086 non provvede direttamente a tutti i segnali che sono richiesti per controllare la memoria, l'inpute, l'output e le interfacce di interruzione. Specificatamente, i segnali WR, M/IO, DT/R, DEN, ALE e INTA non sono più generati dall'8086. Invece, esso manda in uscita i tre segnali di stato S0 S1 S2 precedenti all'inizio di ogni ciclo del bus.

Questi tre bit del codice di stato identificano che tipo di ciclo del bus sta seguendo.

S2 S1 S0 sono dati che in input dal dispositivo esterno del controllo del bus, l'8288, che li decodifica per identificare il tipo di ciclo dell'MPU bus.

In risposta, il bus controller genera i comandi di tempo e i segnali appropiati.

La figura 2.6 mostra la relazione tra i codici di stato e i tipi di ciclo del bus. Mostra anche quali sono i segnali di output che sono generati per riferire al circuito esterno che tipo di ciclo di bus sta prendendo posto. Questi segnali di output sono: - comando di lettura della memoria (MRDC), comando di scrittura della memoria (MWTC), comando avanzato di scrittura della memoria (AMWC), comando di lettura di input e output (IORC), comando di scrittura di input e output (IOWC), comando avanzato di scrittura di input e output (AIOWC) e il comando di riconoscimento degli interrupt (INTA).

L'8288 produce uno o due di questi otto segnali di comando per ogni ciclo del bus. Per esempio, quando l'8086 manda in output la codifica di S2 S1 S0 come 001, esso indica che un ciclo di lettura di un I/O sta per essere eseguito. A sua volta mette il suo interrutore di uscita IORC in logica 0. Dall'altra parte, se il codice 111 è in output dall'8086, esso sta segnalando che nessuna attività del bus sta prendendo posto.

Gli output di controllo prodotti dall'8288 sono DEN, DT/R e ALE. Questi tre segnali provvedono alle stesse funzioni come quelle descritte per il sistema a modo minimo. Questa serie di commandi del bus e di segnali di controllo è compatibile con il Multibus (bus multiplo) in standard industriale per interfacciare i sistemi di microprocessori.

- The 8289 Bus Arbitrer

Guardando la figura 2.5, noi vediamo che un gestore del bus 8289 è anche stato addizionato nel sistema a modo massimo. E' questo dispositivo che permette ai processori multipli di risiedere nel bus di sistema.

Esso fa questo complementando il protocollo arbitrato del multibus in un sistema base 8086.

In aggiunta al controllore del bus 8288 e all' arbitro del bus 8289 sono dati un numero piedini dell'8086 usati per produrre segnali di controllo che sono richiesti per supportare i processori multipli. Il blocco di percedenza del bus (LOCK) è uno di questi segnali.Esso è dato in input dall'arbitro del bus assieme ai segnali di stato S0 e S1. Gli output dell'8289 sono segnali di arbitraggio: bus occupato(BUSY), richieste del bus comune(CBRQ), uscite di precedenza del bus(BPRO), ingressi di precedenza del bus(BPRN), richieste del bus(BREQ), e blocco del bus(BCLK).

Essi corrispondono ai segnali di cambio di bus del multibus e sono usati per chiudere fuori dal sistema dei bus gli altri processori durante l'esecuzione di un'istruzione da parte dell'8086.In questo modo il processore può essere assicurato di un continuo accesso alle risorse del sistema comune come la memoria globale.




(Minato-Melara-Anonimo pagg.22-23)

SEGNALI DELLO STATO DELLA CODA


Due nuovi segnali che sono prodotti dal 8086 nel sistema di modo massimo

sono output di stati della coda QS0 e QS1.

Assieme essi formano un codice di stato della coda a 2-bit, QS1QS0.

Questo codice dice al circuito esterno quale tipo di informazione S stata

rimossa dalla coda durante il precedente ciclo di clock.

La figura 2.7 mostra i 4 differenti stati della coda. Notare che QS1QS0=01

indica che il primo byte di una istruzione S stato prelevato dalla coda.

Come mostrato, il successivo byte di una istruzione che viene preso, S

identificato dal codice 11.

Ogni qual volta il resettamento della coda ,dovuto a un trasferimento di

controllo , viene emesso il codice riinizializzato 10.


SEGNALI DEL BUS LOCALE DI CONTROLLO - SEGNALI DI RICHIESTA/CONCESSIONE


Nella configurazione di moda massimo ,l'interfaccia del modo minimo HOLD,

HLDA viene cambiata.

Questi due segnali sono riprodotti dalle linee richiesta/concessione

RQ/GT0 e RQ/GT1 rispettivamente.

Loro forniscono un meccanismo di accesso al bus prioritario per accedere

al bus locale.


figura 2.7


QS1 QS0 stati coda

0 0 Nessuna operazione. Durante il precedente ciclo di

clock niente S stato prelevato dalla coda.


0 1 Primo byte. Il byte prelevato dalla coda S il primo

byte dell'istruzione.


1 0 Coda vuota. La coda S stata riinizializzata come un

risultato dell'esecuzione di una istruzione trasferita.



1 1 Sottosequenza byte. Il byte preso dalla coda S un byte di sottosequenza dell'istruzione.

(Rocco-anonimo- pag. 24-25)



2,6 ARCHITETTURA INTERNA DEL 8086



L'architettura interna di un microprocessore descrive i suoi componenti funzionali e la loro interazione. La figura 2,8 mostra un diagramma a blocchi del architettura interna del microprocessore 8086.



Blocchi interni del 8086


Nel microprocessore 8086,le funzioni interne sono divise tra due unità di lavorazione separate. Esse sono l' unita di interfaccia bus(BIU) e l'unità di esecuzione (EU). In genere, la BIU è responsabile del effettuazione di tutte le operazioni sui bus, come il il recupero di istruzioni, la lettura ed la scrittura degli operandi per la memoria, e l'immissione o emissione di dati per unità periferiche. Dall'altra parte l'EU è responsabile dell'esecuzione delle istruzioni. Entrambe le unità operano asincronamente per dare all' 8086 un recupero delle istruzioni ed un meccanismo di esecuzione dell'istruzione intrecciati. In essenza, questa lavorazione parallela della BIU e dell'EU elimina il tempo necessario per recuperare molte delle istruzioni. Questo ha come conseguenza un uso efficiente dei bus di sistema e un significativo miglioramento delle prestazioni del sistema.


Unità Interfaccia Bus


L'unità d'interfaccia bus è l'interfaccia verso il mondo esterno del 8086. Essa provvede completamente ad un bus dati bidirezionale a 16-bit e ad un bus indirizzi a 20-bit. L'unità d'interfaccia bus è responsabile del esecuzione di tutte operazioni dei bus esterni. Specificamente, ha le funzioni seguenti: recupero delle istruzioni, accodamento delle istruzioni, recupero e salvataggio degli operatori, dislocamento degli indirizzi, e controllo dei bus. Per compiere queste funzioni, la BIU contiene i registri di segmento, i registri di comunicazione interni, il puntatore all'istruzione, la coda del codice delle istruzioni, il sommatore degli indirizzi, e la logica del controllo dei bus. Questi componenti sono identificati in figura 2.8. La BIU usa un meccanismo noto come coda di scorrimento delle istruzioni per adempiere ad un architettura del pipeline. Questa coda permette un prerecupero fino a sei byte di codice delle istruzioni. Quando la coda della BIU non è piena, c'é posto per almeno ancora due byte, ed allo stesso tempo, l'EU non richiede di leggere o scrive operandi in memoria., la BIU è libera di guardare avanti nel programma prerecuperando la prossima istruzione sequenziale. Queste istruzioni prerecuperate sono tenute nella sua first in, first out (FIFO) coda. Con il suo bus dati a 16-bit la BIU recupera due byte delle istruzioni in un solo ciclo di memoria. Dopo che un byte è caricato nella coda, esso automaticamente schifta attraverso la FIFO fino alla posizione vuota più vicina all'output. L'EU accede alla coda dalla fine. Legge un byte delle istruzioni dopo l'altro dall output del coda.

Se la coda è piena ed l'EU non richiede alcun accesso agli operandi in memoria, la BIU non compie alcun ciclo di bus. Questi intervalli di inattività del bus, che possono accadere tra i cicli di bus, è noto come stato inattivo. Inoltre, se la BIU è già nel processo di recupero di un'istruzione quando l'EU richiede di leggere o scrivere operandi in memoria o in I/ O, la BIU completa il ciclo di bus per il recupero dell'istruzione prima di iniziare il ciclo di lettura/scrittura degli operandi.

La BIU contiene anche un sommatore riservato il quale è usato per generare l'indirizzo fisico a 20-bit che è emesso sul bus indirizzi. Questo indirizzo è formato sommando indirizzo di segmento a 16-bit ed un indirizzo di spiazzamento a 16-bit. Per esempio l'indirizzo fisico della prossima istruzione da recuperare è formata combinando i contenuti correnti del registro del codice di segmento (CS) ed i contenuti correnti del registro puntatore all'istruzione (IP).

La BIU è anche responsabile della generazionedei segnali di controllo dei bus necessari per il controllo dei circuiti nella memoria e dei sottosistemi di I/O.


(Colombana pagg. 26-27)


L'unit. esecutiva (EU) estrae le istruzioni dalla cima della coda nell'unit.

di interfaccia bus (BIU),le codifica,genera indirizzi se necessario,li passa

alla (BIU) e li richiede per eseguire i cicli di lettura e scrittura della

memoria o I/O ed esegue l'operazione specificata dall'istruzione sugli

operandi.

Durante l'esecuzione dell'istruzione,l'EU testa gli stati e il controllo dei

flag e li aggiorna basandosi sul risultato dell'operazione.

Se la coda S vuota,l'EU aspetta il byte dell'istruzione successiva per

prenderla e spostarla sulla cima della coda.

Quando l'EU esegue un'operazione di jump,trasferisce il controllo alla

locazione corispondente ad un altro set di istruzioni sequenziali.

Ogni qualvolta questa istruzione appare,la BIU risetta automaticamente la coda

e poi comincia ad andare a prendere le istruzioni da questa nuova locazione

per riempire la coda.


REGISTRI INTEGRALI DELL'8086

L'8086 ha quattro gruppi di registri interni accessibili all'utente.

Essi sono: il puntatore all'istruzione (IP),quattro registri per i dati,

quattro registri puntatore e indice,e quattro registri segmento.

Essi rappresentano un totale di tredici registri a 16 bit ma in aggiunta a

questi c'S un altro registro a 16 bit chiamato registro di stato con 9 dei

suoi 16 bit implementati per gli stati e il controllo dei flag.


PUNTATORE ALLE ISTRUZIONI

Il puntatore alle istruzioni S un registro a 16 bit all'interno dell'8086 che

identifica la locazione dell'istruzione successiva da eseguire nella coda di

segmento corrente.

Esso S simile al 'program counter' comunque.L'IP infatti contiene un puntatore

offset invece di un dell'indirizzo fisico dell'istruzione successiva,questo

perchS l'8086 ha registri e memorie a 16 bit ma richiede un indirizzo a 20

bit.

L'offset deve essere combinato con i contenuti di un altro registro,in questo

caso con il registro codice segmento (CS),per generare l'indirizzo fisico

dell'istruzione.Questo registro S allocato fisicamente nella BIU.

Ogni volta che un'istruzione viene presa dalla memoria,la BIU aggiorna il

valore nell'IP,in modo da puntare alla prossima sequenza di istruzioni in

memoria.


REGISTRI DATI

Come mostrato in figura 2.8 ci sono quattro registri di dati generali che sono

allocati all'interno della EU dell'8086.

Durante l'esecuzione del programma essi sono utilizzati per memorizzare

temporaneamente i risultati intermedi.

Il vantaggio di memorizzare questi dati in registri interniinvece che nella

memoriaS che ad essi si p-o accedere molto pi- velocemente.

I registri dati sono mostrati in maggior dettaglio in figura 2.9a.

Qu vediamo che i quattro registri dati sono:registro accumulatore (A),

registro base (B),registro contatore (C) e registro dati (D).

Ogni registro S accessibile sia come 1 da 16 bit che come 2 da 8 bit.

I riferimenti ad un registro a 16 bit sono identificati da una 'x' dopo la

lettera del registro.Per esempio il registro accumulatore S AX e nello stesso

modo gli altri tre registri sono nell'ordine BX,CX,DX.

Quando invece ci riferiamo al byte alto o a quello basso,queste parti vengono

rispettivamente indicate con una 'h' o una 'l' dopo la lettera del registro.

Per il registro A la parte pi- significativa S AH,quella meno significativa S

AL.Gli altri byte vengono anch'essi divisi in BH-BL,CH-CL e DH-DL.

Molti dei registri dati generali possono essere usati per operazioni di tipo

aritmetico e logico come la somma o l'AND.

Comunque,per alcune operazioni come quelle eseguite da stringhe di istruzioni,

sono usati registri specifici.

Nel caso di una stringa di istruzioni il registro C S usato per memorizzare un

numero che rappresenta il numero di byte da muovere.-

Questa S la ragione per la qaule il suo nome S 'registro contatore'.

Un altro esempio di uso dedicato al registro dati S che tutte la operazioni

di I/O richiedono che i dati che vengono messi input o output devono essere nel

registro A mentre il registro DX tiene l'indirizzo della porta di I/O.

La figura 2.9b riporta le funzioni dei registri generali.


REGISTRI PUNATORE E INDICE

Ci sono altri quattro registri generali,mostrati in figura 2.8,due registri

puntatore e due registri indice.

Essi sono utilizzati per memorizzare gli indirizzi delle locazioni di memoria

relativi ai registri di segmento.

I valori tenuti in questi registri possono essere caricati o modificati

attraverso programmi.Questo S fatto eseguendo l'istruzione che si riferisce al

registro di indirizzo di offset.

In questo modo l'istruzione specifica semplicemente quale registro contiene

l'indirizzo di offset



Figura 2.9a



H L

|

15 8|7 0

É----- ----- ---------

| AX |

----- ----- ---------- ACUMULATORE

| AH | AL |

È----- ----- ---------

É----- ----- ---------

| BX |

----- ----- ---------- BASE

| BH | BL |

È----- ----- ---------

É----- ----- ---------

| CX |

----- ----- ---------- CONTATORE

| CH | CL |

È----- ----- ---------

É----- ----- ---------

| DX |

----- ----- ---------- DATI

| DH | DL |

È----- ----- ---------





Figura 2.9b


-------- ----- ------ --------

| REGISTRO | OPERAZIONI |

-------- ----- ------ --------

| AX | Moltiplicazione di word |

| | Divisione di word |

| | Operazioni di I/O con word |

-------- ----- ------ --------

| AL | Moltiplicazione con byte |

| | Divisione con byte |

| | Operazioni di I/O con byte |

| | Numeri dacimali |

-------- ----- ------ --------

| AH | Moltiplicazione con byte |

| | Divisione con byte |

-------- ----- ------ --------

| BX | Trasferisce |

-------- ----- ------ --------

| CX | Operazioni con stringhe |

| | Cicli |

-------- ----- ------ --------

| DX | Moltiplicazione di word |

| | Divisione di word |

| | Operazioni di I/O indirette|

-------- ----- ------ --------


(Coro'-Baldassa-pagg.28-29)


Figura 2.10 mostra che i due registri puntatori sono il puntatore di pila (SP) e puntatore di base (BP) .Il puntatore di pila permette un facile accesso alle locazioni nel segmento di memoria del puntatore di pila (stack).Il valore in SP rappresenta l' indirizzo della prossima locazione di memoria dello stack che può essere raggiunta in relazione all indirizzo corrente nel registro segmento della pila (SS);che è sempre diretto alla sommità della pila. BP rappresenta anche un indirizzo dal registro SS. Comunque è usato per accedere ai dati senza

il segmento di pila. I registri indice sono usati per mantenere lo l ' indirizzo di spiazzamento per una istruzione che accede ai dati memorizzati ne segmento dei dati della memoria. Per questa ragione sono sempre riferiti al valore del registro del segmento dei dati (DS).Il registro indice sorgente (SI) è usato per immagazzinare un indirizzo di spiazzamento per una sorgente dell' operando e il registro indice di destinazione (DI) è usato per la memorizzazione di uno spiazzamento che identifica la locazione di una destinazione dell' operando. Per esempio , un istruzione stringa che richiede uno spiazzamento dalla locazione di una sorgente o destinazione dell' operando userebbe questi registri.


REGISTRI SEGMENTO

Come indichiamo più presto ,l' indirizzo fisico di un 8086 è ampio 20 bits ma i suoi registri e le locazioni di memoria che contengono l' indirizzi logici sono proprio ampi 16 bits. Questi ammettono 1 M-byte di spazio di indirizzo. Comunque , lo spazio di indirizzo è diviso in 64K

segmenti di byte e proprio quattro segmenti possono essere attivati in una volta. E' per la selezione dei quattro segmenti attivati che i 16-bit dei registri segmento sono provvisti senza la BIU del 8086.

Questi quattro registri sono registro segmento di codice (CS),registro segmento dei dati (DS), segmento di stack(SS), registro segmento extra (ES).Questi registri sono mostrati in fig.2.11.Sono caricati indirizzi a 16bit che identificano quali segmenti di memoria sono attivi. Per esempio, il valore in CS identifica l 'indirizzo d' inizio del segmento di 64K-byte conosciuto come il segmento di codice. Per " indirizzo d' inizio ", intendiamo i più bassi byte indirizzati nel segmento di codice attivo. I valori mantenuti in questi registri per esempio ,l' indirizzo corrente del codice segmento , sono frequentemente riferiti ai correnti valori del registro segmento. Il segmento di codice della memoria contiene istruzioni del programma I contenuti del CS identificano la locazione iniziale del corrente segmento di codice in memoria. Per accedere alle locazioni immagazzinate di un istruzione nel codice di segmento attivo, l' 8086 deve generare l' indirizzo fisico a 20-bit.

Per fare questo , esso combina i contenuti del registro puntatore all' istruzione (IP) con il

valore di CS per produrre l' indirizzo fisico che sarà emesso sul bus indirizzi.

L' effettivo codice del segmento può essere cambiato dalla semplice esecuzione di una

istruzione che carica un nuovo valore nel registro CS. Per questa ragione, possiamo usare

uno qualsiasi dei segmenti indipendenti della memoria per la memorizzazione del codice.

I contenuti del registro segmento data DS individuano la locazione d' inizio del corrente

segmento data nella memoria.Questo è un secondario segmento attivo con capacità 64k

che provvede una lettura/scrittura nello spazio memoria nel quale il dato è stato memo-

rizzato. Gli operandi di molte istruzioni sono portati da questo segmento. Comunque,un

prefisso può essere incluso con un istruzione per ottenere gli operandi da uno qualsiasi

degli altri segmenti.I valori nel registro indice sorgente (SI) o nel registro indice destina-

zione (DI) sono combinati con il valore di DS per formare l' indirizzo fisico, da 20-bit,

della sorgente o destinazione dell' operando del segmento data.

Il registro segmento stack (SS) contiene un indirizzo logico che identifica la locazione

d' inizio del corrente segmento stack in memoria.Esso è un segmento da 64k che contiene

i valori del puntatore all' istruzione (IP),la condizione dei flag, e altri registri vi vengono

spinti ogni qualvolta un interruzione hardware, un interruzione software,o una sottoroutine

viene chiamata.Dopo che la routine di servizio o la sottoroutine è completata, la condi-

zione originale del sistema è restituita dallo stack con l' esecuzione di istruzioni pop e un'

istruzione di ritorno. La prossima locazione nella quale una parola può essere spinta o

dalla quale può essere presa identifica la combinazione del corrente valore di SS con

quello del puntatore stack SP.

L' ultimo registro segmento identifica la quarta effettiva area di memoria da 64k.

Questa area è chiamata segmento extra (ES).Il segmento extra è solitamente usato per

memorizzare dati. Per esempio, le istruzioni stringa usano il valore di ES con il contenuto

di DI come un offset che specifica l' indirizzo destinazione.


REGISTRO FLAG

Il registro flag è un registro a 16-bit dentro l' EU. Comunque,come mostra la figura 2.1

appena nove dei suoi bit sono riempiti. Sei di questi bit rappresentano lo stato dei flag.

Essi sono: il flag di riporto CF,il flag di parità PF,il flag di riporto ausiliario AF,il flag di

zero ZF,il flag di segno SF,e il flag di overflow OF.

Lo stato dei flag indica le condizioni prodotte dai risultati dell' esecuzione di un' istruzione

aritmetica o logica.I bit dei flag vengono posti a 1 o a 0 alla completazione dell' esecuzio-

ne dell' istruzione.

Per prima cosa riassumiamo l' operazione di questi stati di flag:


(Campigotto-Battistetti-Mason- pagg. 30-31)

1.Il flag di carry (cf):CF è a uno se c'è un riporto o un prestito per il bit più

significativo durante l'esecuzione di un'istruzione aritmetica.Altrimenti ,CF è a 0.

2.Il flag di parità (PF) :PF è a 1 se il risultato prodotto dall'istruzione è ancora di parità,se esso contiene un'altro numero di bits al primo livello logico.Se la parità è dispari ,PF è a 0.

3.Il flag di roporto ausiliario(AF):AF è a uno se c'è un riporto sul semibyte basso verso il semibyte alto o un prestito dal semibyte alto al semybyte basso del byte più basso in una parola a 16 bit.Altrimenti AF è a 0.

4.Il flag di zero (ZF):ZF è a 1 se il risultato di una operazione aritmetica o logica è a zero .Altrimenti ZF è a 0.

5.Il flag di segno(SF):il bit più significativo del risultato è copiato nel SF.Questo SF è a 1 se il risultato è un numero negativo o a 0 se è positivo.

6.Il flag di overflow(OF):quando OF è a 1 indica che il risultato segneto è fuori dal range.Se il risultato non è fuori dal range , OF resta a 0.

Per esempio, al completamento dell'esecuzione dell'istruzione di addizione di un byte,il flag di carry(CF) potrebbe essere a 1 per indicare che la somma deglui operandi causa una condizione di riporto.Il flag di riporto ausiliario potrebbe anche essere a 1 all'esecuzione dell'istruzione . Questo dipende se sia o meno necessario una realizzazione del semibyte meno significativo al più significativo quando vengono aggiunti i byte operandi.Il flag di segno (SF) è anche influenzato e ririfletterà il livello logico del bit più significativo(MSB)del risultato.

I flag di stato sono solo letti ,perciò, possono solo essere testati.L'8086 provvede istruzio all'interno del suo set di istruzioni che abilitano l'uso di questi flag per alterare la sequenza nella quele il programma è esequito.Per esempio ZF equivalente alla logica 1 potrebbe essere testato come la condizione che implica un salto su un'altra parte del programma.

Gli altri 3 bit di flag implementati sono i flag di controllo.

Essi sono i flag di direzione(DF),il flag di abilitazione dell'interrupt (IF)e il flag di trappola(TF).Questi 3 flag controllano le funzioni dell'8086 come segue:

1.Il flag di trappola (TF):se TF è a 1,l'8086 lavora nella modalità di singola istruzione.Quando lavora in questo modo esegue un'istruzione alla volta .Questo tipo di istruzione è moltìo adatta per il debug dei programmi.

2. Il flag di interrupt (IF):Perchè l'8086 riconosca la richiesta di interrupt mascherabile come suo ingresso di interrupt ,il flag IF deve essere ad 1. Quando IF e' a zero le richieste di interrupt sono eseguite e le interfacce di input mascehrabile sono disabilitate.

3. il flag di direzione (DF): il livello logico di DF determina la direzione nella quale le operazioni di stringhe succederanno. Quando e' a zero autoindicante la stringa delle istruzioni decrementa l' indirizzo. Percio', la stringa dati trasferisce ....... da altro indirizzo a basso indirizzo. Nell'altro caso, impostando DF ad 1, l'indirizzo della stringa viene incrementato. In questo modo, il trasferimento procede da indirizzi bassi ad indirizzi alti.

i BIT cf, df, if E tf DEL REGISTRO DEI FLAG POSSONO ESSERE MODIFICATI in un altro punto del programma attraverso l'uso del software. Cioe' istruzioni speciali sono stabilite nella serie di istruzioni dell' 8086 come quelle che possono essere attivate o disattivate. Per esempio, all' inizio di una routine di gestione interrupt, IF puo' essere azzerat. Questo richiede l'evento di un altro interrupt mascherabile. Alla fine della routine di servizio, puo' essere attivato un'altra volta per abilitare gli interrupt mascherabili.


2.8 CLOCK DI SISTEMA

Il tempo base per la sincronizzazione delle operazioni interne ed esterne dell'8086

e' provvisto di un segnale di ingresso chiamato clock. Attualmente, l' 8086 e' disponibile con 2 diverse velocita'. La parte standard opera a 5 Mhz e l'8086-2 opera a 8 Mhz.

Il clock e' generato esternamente da un generatore di clock 8284 e il driver IC.

La figura 2.13 e' un diagramma a blocchi di questo dispositivo.




(Milani-Sgarbossa)



Il modo normale nel quale questo clock chip è usato è per connettere sia un cristallo 15-MHz che uno 24-MHz tra i suoi X1 e X2 ingressi. Questo circuito connesso è illustrato nella Fig. 2.14. Avviso che una serie di condensatori CL è anche richiesta. Il suo tipico valore quando è usato con il cristallo 15-MHz è 12pF. La frequenza fondamentale del cristallo è divisa in tre dentro l' 8284 per dare sia un segnale di clock a 5-MHz che a 8-MHz. Questo segnale è prodotto e mandato fuori al CLK. Il CLK può essere direttamente connesso dal CLK dell' 8086.

La forma d'onda del CLK è illustrata in Fig. 2.15. Quì noi vediamo che il segnale è compatibile ai livelli di voltaggio MOS e non a quelli TTL. I suoi minimi e massimi bassi livelli logici sono VLmin =-0.5V e VLmax =0.6V, rispettivamente. Inoltre, i minimi e massimi alti livelli logici sono rispettivamente VHmin =3.9V e VHmax =Vcc+1V. Il periodo del segnale del clock a 5-MHz può variare da un minimo di 200ns a un massimo di 500ns, e il massimo sale e riempie il tempo alla sua estremità pari a 10ns.

In Fig. 2.13 noi vediamo che ci sono due ulteriori segnali di clock d'uscita nell' 8284.

Essi sono clock periferici (PCLK) e clock oscillatori (OSC). Questi segnali sono provvisti epr pilotare periferiche ICs. Il segnale clock d' uscita APCL è sempre metà della frequenza di CLK. Esso è sia 2.5 MHz che 4 MHz. Esso è anche compatibile ai livelli TTL piottosto che ai livelli MOS. Dall' altro canto, il OSC d' uscita è alla frequenza fondamental di clock la quale è di tre periodi di clock. Queste relazioni sono illustrate in Fig. 2.16.

L' 8284 può essere anche pilotato da una fonte esterna di clock. Il segnale di clock esterno è applicato dalla frequenza esterna di ingresso (EFI). L'ingresso F/C(segnato) è provvisto per la fonte di selezione di clock. Quando esso è legato al livello di logica 0, il cristallo è usato tra i suoi X1 e X2. D'altro canto applicando la logica 1 all' F/C(segnato) seleziona l' EF1 come fonte del clock. Il segnale di ingresso clock sync (CSYNC) può essere usato per sincronizzazioni esterne nei sistemi che impiegano clock multipli.


Figura 2.14: Connessione del 8284 con l'8086.

Figura 2.15: Voltaggio e sincronizzazione delle caratteristiche di CLK.

Figura 2.16: Relazione tra CLK e PCLK.


2.9 CICLI DI BUS


Il ciclo di bus dell' 8086 è usato per accedere in memoria, I/O dispositivi, oppure per controllare l' interrupt. Come illustrato in Fig. 2.17(a), esso corrisponde alla sequenza di eventi che iniziano con un indirizzo d' uscita nel sistema di bus seguiti da una lettura o scrittura dei dati trasferiti. Durante queste operazioni, una serie di segnali di controllo sono anche prodotti dall' 8086 per controllare la direzione e la sincronizzazione del bus.

Il ciclo del bus del processore 8086 consiste al minimo di quattro periodi di clock.

Questi quattro stati sono chiamati T1, T2, T3 e T4. Durante T1, il BIU trasferisce un indirizzo nel bus. Per un ciclo di scrittura in memoria, i dati sono trasferiti nel bus durante il periodo T2 e sono mantenuti nel T3, e T4. Quando il ciclo di lettura è eseguito, il bus è il primo messo nello stato di alta Z durante T2 e poi i dati devono essere letti e messi nel bus durante T3 e T4. Questi quattro stati di clock danno un ciclo di bus con durata di 125ns X 4 =500ns in 8-MHz nel sistema 8086.

Se non sono richiesti i cicli di bus, il BIU esegue quelli che sono conosciuti come stati di inattività. Durante questi stati non c'è attività del bus. Ciascun stato di inattività è un lungo periodo di clock e ciascun numero di essi può essere inserito tra due cicli di bus. Fig. 2.17(b) mostra i due cicli di bus separati da stati inattivi. Sono anche eseguiti stati inattivi se la coda è piena e l'EU non richiede il BU per leggere o scrivere operandi dalla memoria


Figura 2.17: (a) Periodi di clock del ciclo di bus; (b) Ciclo di bus con stati inattivi; (c) Ciclo di bus con stati di attesa.





(Pellizzato- Anonimo)

1° parte di pag. 34


Gli stati di attesa possono anche essere inseriti in un ciclo di bus.

Questo viene fatto in risposta ad una richiesta di un evento nell'hardware

esterno invece di un'evento interno come una coda piena.

In fatti l'imput READY dell'8086 e previsto specificatamente per questo scopo.

La figura 2.17(c) mostra che lo 0 logico di questo imput indica che

il corrente ciclo di bus non è stato completato.

Per il tempo in cui READY è tenuto a livello 0, gli stati di attesa sono

inseriti fra il periodo T3 e T4 del corrente ciclo di bus e il dato che era

sul bus durante T3 viene mantenuto. Il ciclo di bus non viene completato

finché l'hardware esterno non ritorna indietro READY a livello logico 1.

Questo estende la durata del ciclo di bus, permettendo così una minor

quantità di memoria del sistema.



(Sparisi -pag. 34)


10. SEQUENZA PER L'ESECUZIONE DELLE OPERAZIONI

Durante il normale periodo operativo,l'8086 preleva istruzioni una dopo l'altra dalla memoria programmi e la esegue. Dopo che l'istruzione è stata prelevata, essa deve essere codificata all'interno dell'8086,e se necessario viene prelevato il suo operando in altre memorie dati o dai registri interni. L'operazione specificata dall'istruzione è eseguita sugli operandi e il risultato è riscritto su dei registri interni o in una locazione di memoria dati.L'8086 è adesso pronto per eseguire l'istruzione sucessiva La figura 2.18 mostra in dettaglio il sovrapporsi della fase di prelievo ed esecuzione del 8086. Nota che mentre la EU ste esguemdo la prima precedente istruzione, la BIU preleva gia' la sucessiva sul bus dati di sistema. Dopo questo, una terza istruzione è prelevata dall'uscita della coda. Essa è estratta dalla coda della EU e eseguita. Nello stesso momento,l a BIU usa il bus per scrivere il risulltato della prima istruzione nella memoria.Nell'istante sucessivo,la quarta istruzione è prelevata dalla BIU e messa nella coda. Durante il quinto periodo, un operando richiesto dalla terza istruzione, è letto sul bus. Alla fine la terza istruzione è eseguita e una quinta è prelevata. Nota che durante questo intervallo di tempo 4 nuove istruzioni sono state prelevate e caricate nella coda e tre sono state eseguite. Un programma in linguaggio Assembler e il suo equivalente 8086 codice macchina sono mostrati in figura 2.19(a).Questo programma è un ciclo che si ripete continuamente. Nota che le istruzioni sono codificate usando 1,2,3,4 byte. Per esempio l'istruzione MOV AX,OFO2H è rappresentata con tre byte B8,O2 e F8.Dall'altra parte .PUSH AX occupa un solo file che è 50.

Il programma è memorizzato nel segmento di codice della memoria in byte consecutivi come mostrato in figura 2.19(b).Nota che esso occupa 16 byte indirizzato per contenere l'intero programma.

Ricorda che lo stato della coda e del bus sono dei segnali di autput del massimo-modo 8086.Qs1, Qs0 identificano le istruzioni dello stato della coda inizializzata dalla EU nel colpo di clock precedente.Inoltre,il codice di S2 S1 S0 dice al controllore esterno del bus 8288 che tipo di ciclo è in esecuzione. 

(Pellizzato anonimo)

Pag. 35


Anche ricordando che l'interazione tra BIU e EU è in qualche modo di coda

per le istruzioni di prefetch, codice operativo e operandi immediati.

Per gli altri cicli di bus deve esserci la richiesta della BIU per mezzo

della EU per accedere agli operandi in memoria.

La figura 2.19(c) mostra in dettaglio le relazioni tra i segnali, bus attivo

e gli stati di coda interni che sono importanti per capire le sequenze

di istruzione execute dell'8086. Questo diagramma include il periodo di

clock (CLK), il codice degli stati di bus (S2,S1,S0), tipi di cicli di bus

(attività BIU), il contenuto della coda (QUEUE), il codice degli stati della

coda (QS1,QS0) e il ciclo di esecuzione delle istruzioni (EU esecuzione

istruzioni). Noi ora tracciamo le operazioni dell'8086 passo dopo passo

attraverso l'esecuzione di una istruzione del programma in figura 2.19(a).

In questo esempio noi assistiamo ad una istruzione di salto JMP $-14 che è

stata caricata fuori dalla coda per mezzo di EU. Perciò durante i periodi di

clock dal 1° al 7° la EU sta eseguendo queste operazioni. Nel 1° periodo di

clock in Fig. 2.19(c), noi vediamo che la coda è stata inizializzata con

del codice non valido. Perciò durante questo periodo gli stati della coda

QS1,QS2



(Volpato-Simioni)

Pagine 36-37


S l'uscita. Questo indica che la coda di istruzioni S vuota. Inoltre, il bus

S inattivo (TI) per i periodi di clock 1 e 2.

I prossimi quattro tempi di clock, da 3 a 6, rappresentano un ciclo di bus

di prelevamento del codice. Nota che l' attivit. del bus identifica i quattro

periodi di clock da T1 a T4 di un ciclo di lettura. Durante questo ciclo di

bus, B806h S prelevato da un programma di memorizzazione e caricato dentro la

coda delle istruzioni. Il codice dello stato di ricerca del codice S2S1S0=100

S l' uscita del 8086 durante i periodi T1 e T2 del ciclo di bus.

I prossimi quattro tempi di clock, da 7 a 10, rappresentano un altro ciclo

di lettura. Questo ciclo corrisponde al prelevamento di F850h ed i suoi posi_

zionamenti nella coda delle istruzioni. Ma allo stesso tempo, l' EU legge il

primo dei due bytes dell' istruzione MOV dalla coda delle istruzioni.

Il primo byte, che S B8h, S accompagnato dalla posizione del codice di coda

del primo byte, QS1QS0=01, e il secondo byte, 02h, S accompagnato dal codice

di stato QS1QS0=11. Ricorda che ci. S il terzo byte dell' istruzione e l' ul_

timo byte, che S F8h, che fu appena prelevato dentro la coda delle istruzioni.

Alla fine di questo ciclo di bus di prelevamento della seconda istruzione, noi

troviamo che appena due bytes, F8h e 50h, rimangono nella coda delle istruzio_

ni. Essi rappresentano l' ultimo byte dell' istuzione MOV e l' istruzione PUSH

completa.

Durante i tempi di clock da 11 a 14, ha luogo un altro ciclo di bus di pre_

levamento del codice. Inoltre, durante la prima met. del ciclo di bus, l' EU

rimuove il terzo byte dell' istruzione MOV dalla coda delle istruzioni. Questo

comleta l' esecuzione dell'istruzione MOV AX,0F802h. L' esecuzione delle is_

truzioni rimanenti procedono similarmente.









Privacy




Articolo informazione


Hits: 5932
Apprezzato: scheda appunto

Commentare questo articolo:

Non sei registrato
Devi essere registrato per commentare

ISCRIVITI



Copiare il codice

nella pagina web del tuo sito.


Copyright InfTub.com 2024