# Intel 8086

L'Intel 8086 (chiamato anche iAPx86 durante i primi anni ottanta) è un microprocessore a 16 bit progettato da Intel nel 1978, che diede origine all'architettura x86.
È basato sull'8080 e sull'8085; è compatibile con l'assembly dell'8080, ha un insieme di registri simili, ma a 16 bit. L'unità di interfaccia con il bus (denominata BIU, Bus Interface Unit) passa le istruzioni all'unità di esecuzione (denominata SEPPE, SEquential Post Processing Execution) attraverso una coda FIFO di prefetch di 6 byte, in modo che il fetch e l'esecuzione delle istruzioni fosse contemporaneo, come una forma primitiva di pipelining.
Le istruzioni dell'8086 avevano una dimensione tra 1 e 6 byte.

## Caratteristiche

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 può accedere ad una sola locazione di memoria, perciò uno degli operandi deve essere un registro. Il risultato viene memorizzato in uno degli operandi.
Ci 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, ciò 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 realizzato nell'Intel 80286 cambiando radicalmente lo schema di indirizzamento.
Il processore ha una velocità di clock tra i 4,77 (nei primi PC IBM) e i 10 MHz.
Tempi di esecuzione in cicli (stime):
* addizione: 3–4 (registri), 9+IE–25+IE (accesso in memoria);
* moltiplicazione: 70–118 (registri), 76+IE–143+IE (accesso in memoria);
* copia valori: 2 (registri), 8+IE–14+IE (accesso in memoria);
* salto "near": 11–15 (registri), 18+IE (accesso in memoria);
* salto "far": 15 (registri), 24+IE (accesso in memoria);
IE: tempo per calcolare l'indirizzo effettivo, tra i 5 e i 12 cicli.
L'8086 non prevede nessuna istruzione per i calcoli in virgola mobile, ma può essere collegato ad un coprocessore matematico per aggiungere questa caratteristica. Lo standard era l'Intel 8087, ma produttori come Weitek offrirono presto alternative con prestazioni superiori.
L'8086 fu clonato dai processori NEC V20, V25 e V30.

## Microcomputer che usano l'8086

Il primo microcomputer commerciale costruito utilizzando l'8086 fu il Mycron 2000.
Anche la IBM Displaywriter, una macchina per la scrittura di testi, utilizzava l'8086.
Era basato sull'8086 anche M24: il primo e più famoso dei computer PC-compatibili costruiti in Italia da Olivetti.
I PC IBM utilizzavano la versione interfacciata esternamente a 8 bit del medesimo processore, l'Intel 8088.
Anche l'IBM System/2 Model 30, utilizzava l'8086.
Il microcomputer Giano 88, prodotto da Elit Micromegas intorno al 1980, utilizzava un Intel 8088, con il quale, grazie ad un sistema operativo proprietario, riusciva a gestire fino a 4 terminali.