Il processore ha una velocità di clock tra i 4,77 (nei primi pc IBM) e i 10 MHz.

È basato sull'8080 e sull'8085 (è compatibile con l'assembly dell'8080), con un insieme di registri simili, ma a 16 bit. L'unità di interfaccia con il bus (detta BIU da Bus Interface Unit) passa le istruzioni all'unità di esecuzione (detta EU da Execution Unit) attraverso una coda di prefetch, in modo che il fetch e l'esecuzione delle istruzioni fosse contemporaneo – una forma primitiva di pipelining (le istruzioni dell'8086 avevano una dimensione tra 1 e 4 byte). Ha quattro registri a 16 bit per uso generico, a cui si può accedere come se fossero otto registri a 8 bit, e quattro registri a 16 bit di indice (incluso lo stack pointer). I registri per i dati sono spesso utilizzati implicitamente dalle istruzioni, complicando l'uso degli stessi per memorizzare valori temporanei. Ha uno spazio di indirizzamento a 16 bit per l'I/O (cioè può accedere a 65.536 dispositivi di I/O a 8 bit e dispone di una tabella di vettori per gli interrupt fissa. La maggior parte delle istruzioni possono accedere ad una sola locazione di memoria, perciò uno degli operandi deve essere un registro. Il risultato viene memorizzato in uno degli operandi. Schema del processoreCi sono anche quattro registri per i segmenti che possono essere calcolati dai registri di indice. I registri di segmento permettono alla CPU di accedere ad un megabyte di memoria in un modo particolare. Invece di fornire i byte mancanti, come nella maggior parte dei processori che supportano la segmentazione, l'8086 fa uno shift a sinistra di 4 bit del registro di segmento e lo somma all'indirizzo. Il risultato è che i segmenti si possono sovrapporre (parzialmente o totalmente), il che è stato considerato come un indice di cattiva progettazione da molti sviluppatori. Anche se questo è un vantaggio per la programmazione in linguaggio assembly, dove il controllo sui segmenti è completo, causa invece confusione nei linguaggi che fanno molto uso dei puntatori (come ad esempio il linguaggio C). Lo schema di segmentazione dell'8086 rende difficile una rappresentazione efficiente dei puntatori ed è possibile avere due puntatori con valori diversi che puntano ad una stessa locazione di memoria. Inoltre non si può estendere facilmente per aumentare lo spazio di indirizzamento a più di un megabyte. In effetti questo è stato fatto nell'Intel 80286 cambiando radicalmente lo schema di indirizzamento. .

Created on ... febbraio 07, 2008