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.