Microprocessore - 8086 Unità funzionali
8086 Il microprocessore è diviso in due unità funzionali, ovvero EU (Execution Unit) e BIU (Unità di interfaccia bus).
UE (Execution Unit)
L'unità di esecuzione fornisce istruzioni alla BIU indicando da dove prelevare i dati e quindi decodificare ed eseguire tali istruzioni. La sua funzione è controllare le operazioni sui dati utilizzando l'istruzione decoder e ALU. EU non ha alcun collegamento diretto con i bus di sistema come mostrato nella figura sopra, esegue operazioni sui dati tramite BIU.
Parliamo ora delle parti funzionali dei microprocessori 8086.
ALU
Gestisce tutte le operazioni aritmetiche e logiche, come +, -, ×, /, OR, AND, NOT.
Flag Register
È un registro a 16 bit che si comporta come un flip-flop, cioè cambia il suo stato in base al risultato memorizzato nell'accumulatore. Ha 9 flag e sono divisi in 2 gruppi: flag condizionali e flag di controllo.
Flag condizionali
Rappresenta il risultato dell'ultima istruzione aritmetica o logica eseguita. Di seguito è riportato l'elenco dei flag condizionali:
Carry flag - Questo flag indica una condizione di overflow per le operazioni aritmetiche.
Auxiliary flag- Quando un'operazione viene eseguita in ALU, risulta in un carry / barrow dal nibble inferiore (cioè D0 - D3) al nibble superiore (cioè D4 - D7), allora questo flag è impostato, cioè il carry dato da D3 bit a D4 è Bandiera AF. Il processore utilizza questo flag per eseguire la conversione da binario a BCD.
Parity flag- Questo flag viene utilizzato per indicare la parità del risultato, ovvero quando gli 8 bit di ordine inferiore del risultato contengono un numero pari di 1, viene impostato il flag di parità. Per un numero dispari di 1, il flag di parità viene ripristinato.
Zero flag - Questo flag è impostato a 1 quando il risultato di un'operazione aritmetica o logica è zero, altrimenti è impostato a 0.
Sign flag - Questo flag contiene il segno del risultato, cioè quando il risultato dell'operazione è negativo, il flag del segno è impostato a 1 altrimenti impostato a 0.
Overflow flag - Questo flag rappresenta il risultato quando viene superata la capacità del sistema.
Flag di controllo
I flag di controllo controllano le operazioni dell'unità di esecuzione. Di seguito è riportato l'elenco dei flag di controllo:
Trap flag- Viene utilizzato per il controllo a passo singolo e consente all'utente di eseguire un'istruzione alla volta per il debug. Se è impostato, il programma può essere eseguito in una modalità a passo singolo.
Interrupt flag- È un flag di abilitazione / disabilitazione dell'interrupt, ovvero utilizzato per consentire / vietare l'interruzione di un programma. È impostato a 1 per la condizione di interrupt abilitato e impostato a 0 per la condizione di interrupt disabilitato.
Direction flag- Viene utilizzato nelle operazioni su stringhe. Come suggerisce il nome quando è impostato, si accede ai byte di stringa dall'indirizzo di memoria superiore all'indirizzo di memoria inferiore e viceversa.
Registro di uso generale
Sono disponibili 8 registri di uso generale, ovvero AH, AL, BH, BL, CH, CL, DH e DL. Questi registri possono essere utilizzati individualmente per memorizzare dati a 8 bit e possono essere utilizzati in coppia per memorizzare dati a 16 bit. Le coppie di registri valide sono AH e AL, BH e BL, CH e CL e DH e DL. Si riferisce rispettivamente ad AX, BX, CX e DX.
AX register- È anche noto come registro accumulatore. Viene utilizzato per memorizzare gli operandi per le operazioni aritmetiche.
BX register- Viene utilizzato come registro di base. Viene utilizzato per memorizzare l'indirizzo di base iniziale dell'area di memoria all'interno del segmento di dati.
CX register- È indicato come contatore. Viene utilizzato nelle istruzioni di loop per memorizzare il contatore di loop.
DX register - Questo registro viene utilizzato per contenere l'indirizzo della porta I / O per le istruzioni I / O.
Registro del puntatore dello stack
È un registro a 16 bit, che contiene l'indirizzo dall'inizio del segmento alla posizione di memoria, dove una parola è stata memorizzata più di recente nello stack.
BIU (Bus Interface Unit)
BIU si occupa di tutti i trasferimenti di dati e indirizzi sui bus per l'UE come l'invio di indirizzi, il recupero di istruzioni dalla memoria, la lettura dei dati dalle porte e dalla memoria e la scrittura dei dati sulle porte e sulla memoria. L'UE non ha alcun collegamento di direzione con i bus di sistema, quindi questo è possibile con la BIU. EU e BIU sono collegati con il Bus Interno.
Ha le seguenti parti funzionali:
Instruction queue- BIU contiene la coda delle istruzioni. BIU riceve fino a 6 byte di istruzioni successive e le memorizza nella coda delle istruzioni. Quando EU esegue le istruzioni ed è pronto per l'istruzione successiva, legge semplicemente l'istruzione da questa coda di istruzioni con conseguente maggiore velocità di esecuzione.
Viene chiamato il recupero dell'istruzione successiva durante l'esecuzione dell'istruzione corrente pipelining.
Segment register- BIU ha 4 bus di segmento, cioè CS, DS, SS & ES. Contiene gli indirizzi delle istruzioni e dei dati in memoria, che vengono utilizzati dal processore per accedere alle posizioni di memoria. Contiene anche 1 registro puntatore IP, che contiene l'indirizzo dell'istruzione successiva eseguita dall'UE.
CS- È l'acronimo di Code Segment. Viene utilizzato per indirizzare una posizione di memoria nel segmento di codice della memoria, dove è memorizzato il programma eseguibile.
DS- È l'acronimo di Data Segment. Consiste di dati utilizzati dal programma e vi si accede nel segmento dati da un indirizzo di offset o dal contenuto di un altro registro che contiene l'indirizzo di offset.
SS- Sta per Stack Segment. Gestisce la memoria per memorizzare dati e indirizzi durante l'esecuzione.
ES- È l'acronimo di Extra Segment. ES è un segmento di dati aggiuntivo, che viene utilizzato dalla stringa per contenere i dati di destinazione aggiuntivi.
Instruction pointer - È un registro a 16 bit utilizzato per contenere l'indirizzo della successiva istruzione da eseguire.