close

Intel 8086 e 8088

Vai alla navigazione Vai alla ricerca
Intel 8088
I8088.jpg
Microprocessore Intel 8088
Informazione
Creatore
Data di rilascio 1979
Interruzione 1982
Dati tecnici
Frequenza di clock della CPU 5MHz—10MHz
Set di istruzioni x86-16
si collega a
presa/e
  • DIP a 40 pin

Intel 8086 e Intel 8088 ( i8086 , ufficialmente chiamato iAPX 86 e i8088 ) sono i primi microprocessori a 16 bit progettati da Intel . Sono stati l'inizio ei primi membri dell'architettura x86 . Il lavoro di sviluppo per l'8086 è iniziato nella primavera del 1976 ed è stato rilasciato nell'estate del 1978. L'8088 è stato rilasciato nel 1979.

L'8086 e l'8088 eseguono lo stesso insieme di istruzioni . Internamente sono identici, tranne per il fatto che l'8086 ha una coda di istruzioni a 6 byte e l'8088 solo 4. Esternamente differiscono in quanto l'8086 ha un bus dati a 16 bit e l'8088 ha solo 8 bit, quindi l'8086 era più veloce . D'altra parte, l'8088 potrebbe utilizzare meno circuiti logici di supporto, consentendo la produzione di sistemi più economici.

L'8088 era il microprocessore utilizzato per il primo personal computer IBM , l' IBM PC , rilasciato nell'agosto 1981. Tieni presente che la maggior parte dell'hardware, all'inizio degli anni '80, era a 8 bit ed era più economico. L'hardware a 16 bit era quasi inesistente nel 1981 e molto costoso.

Storia

Sfondo

L'8088 è stato progettato in Israele, presso l'Haifa Intel Laboratory, come un gran numero di altri processori Intel. Nel 1972 Intel ha rilasciato l' 8008 , il primo microprocessore a 8 bit. [ 1 ] L'8008 ha implementato una serie di istruzioni progettate dalla società Datapoint che aveva in mente di realizzare terminali CRT programmabili . Anche l'8008 si è rivelato abbastanza generico. Il dispositivo richiedeva diversi circuiti integrati aggiuntivi per produrre un computer funzionante, in parte a causa del suo piccolo "pacchetto di memoria" a 18 pin, che eliminava l'uso di un bus di indirizzi separato (all'epoca, Intel era principalmente un produttore di DRAM ) . .

Due anni dopo, nel 1974, Intel ha rilasciato l'8080, [ 2 ] che utilizza i nuovi pacchetti DIL a 40 pin originariamente sviluppati per i circuiti integrati delle calcolatrici per consentire un bus di indirizzi separato . Aveva un set di istruzioni esteso compatibile a livello di codice sorgente , non codice macchina binario , con l'8008 e includeva anche alcune istruzioni a 16 bit per semplificare la programmazione. Il dispositivo 8080, spesso descritto come il primo microprocessore veramente utile, è stato infine sostituito dall'8085 , basato sulla tecnologia NMOS a carico di esaurimento (1977) che poteva funzionare con un unico alimentatore da 5V invece di tre diverse tensioni di ingresso. patatine fritte. [ 3 ] Altri noti microprocessori a 8 bit emersi in questi anni includevano Motorola 6800 (1974), MOS Technology 6502 (1975), Zilog Z80 (1976) e Motorola 6809 (1978), così come altri.

Il primo design x86

Il progetto 8086 iniziò nel maggio 1976 e originariamente era inteso come un sostituto temporaneo dell'ambizioso e ritardato progetto iAPX 432 . È stato un tentativo di rubare i riflettori ai processori a 16 e 32 bit meno arretrati di altri produttori (come Motorola , Zilog e National Semiconductor ) contrastando anche la minaccia dello Zilog Z80 , che ha avuto molto successo (progettato da ex dipendenti Intel). Pertanto, sia l'architettura che il chip fisico sono stati sviluppati piuttosto rapidamente da un piccolo gruppo di persone e utilizzando gli stessi elementi di microarchitettura di base e le stesse tecniche di implementazione fisica che sono state impiegate per l' 8085 leggermente più vecchio (e per il quale l'8086 funzionerebbe anche come un continuazione).

Image
Linguaggio macchina Intel 8088 . Il codice macchina in esadecimale è evidenziato in rosso, l' equivalente in linguaggio assembly in magenta e gli indirizzi di memoria in cui si trova il codice in blu. Di seguito è riportato un testo in esadecimale e ASCII .

Commercializzato come compatibile con il codice sorgente, l'8086 è stato progettato in modo che il linguaggio assembly per 8008, 8080 o 8085 potesse essere convertito automaticamente in codice sorgente equivalente (non ottimale) 8086, con poche o nessuna modifica a mano. Per rendere ciò possibile, il modello di programmazione e il set di istruzioni erano (vagamente) basati sull'8080. Tuttavia, il design dell'8086 è stato esteso per supportare l'elaborazione completa a 16 bit, piuttosto che le capacità piuttosto semplici a 16 bit dell'8080/ 8085.

Sono state inoltre aggiunte nuove classi di istruzioni, il supporto per gli interi con segno, l'indirizzamento di base + offset e le operazioni che si ripetono automaticamente erano simili al design Z80, [ 4 ] ma tutte sono state rese leggermente più generali nell'8086. Istruzioni a supporto delle funzioni nidificate del Sono state aggiunte anche le famiglie di linguaggi ALGOL come Pascal e PL/M . Secondo l'architetto principale Stephen P. Morse , questo era il risultato di un approccio alla progettazione più incentrato sul software rispetto ai precedenti processori Intel (i progettisti avevano esperienza di lavoro con implementazioni di compilatori). Altri miglioramenti includevano istruzioni di moltiplicazione e divisione del microcodice e una struttura bus più adatta per i futuri coprocessori (come 8087 e 8089 ) e sistemi multiprocessore .

La prima revisione del set di istruzioni e dell'architettura di alto livello era pronta dopo circa tre mesi, [ 5 ] e poiché non veniva utilizzato quasi nessuno strumento CAD, quattro ingegneri e 12 addetti alla creazione di diagrammi stavano lavorando contemporaneamente sul chip. [ 6 ] L'8086 ha impiegato poco più di due anni dall'idea al prodotto funzionante, che è stato considerato piuttosto veloce per un design complesso nel 1976-1978.

L'8086 è stato sequenziato [ 7 ] utilizzando un mix casuale di logica e microcodice ed è stato implementato utilizzando circuiti nMOS a carico di esaurimento con circa 20.000 transistor attivi (29.000 contando tutti i siti ROM e PLA ). È stato presto spostato su un nuovo processo di produzione nMOS raffinato chiamato HMOS (per MOS ad alte prestazioni) che Intel aveva originariamente sviluppato per la produzione di prodotti RAM statici veloci. [ 8 ] Questa è stata seguita dalle versioni di HMOS-II, HMOS-III e, infine, da una versione completamente statica di CMOS per dispositivi alimentati a batteria, prodotta utilizzando i processi CHMOS di Intel . [ 9 ] Il chip originale misurava 33 mm² e la dimensione minima era di 3,2 µm.

L'architettura è stata definita da Stephen P. Morse con l'aiuto e l'assistenza di Bruce Ravenel (l'architetto dell'8087) nel perfezionare le revisioni finali. I progettisti della logica Jim McKevitt e John Bayliss erano gli ingegneri che guidavano il team di sviluppo a livello hardware, [ 10 ] e William Pohlma il manager del progetto. L'eredità dell'8086 sopravvive nel set di istruzioni di base dei personal computer e dei server di oggi; l'8086 ha anche prestato le sue ultime due cifre a versioni successive estese del design, come Intel 286 e Intel 386 , che alla fine sarebbero diventate note come la famiglia x86 . (Un altro riferimento è che l' ID fornitore PCI per i dispositivi Intel è 8086h ! )

Struttura interna

Image
Schema a blocchi dei microprocessori Intel 8086 e 8088.
1 Blocco registro per uso generico
2 Registro IP e blocco registro di segmento
3 Additrice di indirizzi
4 Bus di indirizzi interno
5 Coda di istruzioni (4 byte per l'8088 e 6 byte per l'8086)
6 Unità di controllo (molto semplificata )
7 Interfaccia bus
8 Bus dati interno
9 Unità logica aritmetica (ALU)
10, 11, 12 Indirizzo esterno , bus dati e controllo

Unità di interfaccia bus e unità di esecuzione

L'8086 e l'8088 hanno internamente due componenti, l'unità di interfaccia bus e l'unità di esecuzione (BIU) e l'unità di esecuzione (UE).

  • L'Execution Unit elabora le istruzioni della CPU. È composto dai registri generali, dai registri indice e puntatore, dai flag, dall'unità logica aritmetica e dalla logica di controllo che gestisce l'intero processo per eseguire le istruzioni.
  • L'unità di interfaccia bus gestisce la lettura e la scrittura da e verso la memoria e le porte I /O . È composto dai registri di segmento, da una coda di 4 byte per le istruzioni nell'8088 e 6 nell'8086 e dalla logica per controllare i bus esterni del microprocessore.

Nella figura a destra, l'Execution Unit è in basso e l'Unità di interfaccia bus è in alto. I due sono interconnessi tramite bus interno.

record

Le registrazioni i8086 e i8088 erano basate sul design dell'Intel 8080 e dell'Intel 8085 e sono infatti compatibili a livello di linguaggio assembly con l'i8080. Anche il set di registri è simile all'i8080, ma ampliato a 16 bit. Sia l'i8086 che l'i8088 hanno quattro registri per uso generico a 16 bit , a cui è possibile accedere anche come otto registri a 8 bit e hanno quattro registri di indice a 16 bit (incluso il puntatore dello stack ). I registri di dati vengono talvolta utilizzati in modo implicito dalle istruzioni, rendendo più difficile organizzare i registri da utilizzare con valori temporanei.

I registri del processore vengono utilizzati per contenere i dati su cui si sta lavorando poiché l'accesso ai registri è molto più veloce dell'accesso alla memoria. Puoi eseguire operazioni aritmetiche e logiche, confronti, tra gli altri. Queste operazioni possono essere eseguite con tutti i registri ad eccezione dei registri di segmento, dell'IP e dei flag.

Registri per uso generale

Registri di uso generale
oh AL AX (Accumulatore)
BH BL BX (Base)
CH CL CX (contatore)
HD DL DX (dati)
record di indice
Indice delle fonti _
HA DATO Indice di destinazione _
BP Puntatore base _ _
SP Puntatore di punta _
Registrazione della bandiera
- - - - O D Yo T Z - UN - P - C Bandiere
Record di segmento
CS S egmento di codice
ds S egmento di dati
È Segmento extra _ _
H.H S egmento di pila
registro del puntatore di istruzioni
IP Puntatore istruzioni _ _

I registri di uso generale sono AX, BX, CX e DX a 16 bit. Ciascuno di essi è suddiviso in due registri a 8 bit, chiamati AH e AL, BH e BL, CH e CL, e, DH e DL, H significa Alto (alto) e L significa Basso (basso), indicando la parte alta o la parte inferiore del corrispondente registro a 16 bit (vedi diagramma). Un programma potrebbe utilizzare sia i registri a 16 bit che i registri a 8 bit. Oltre all'uso generale dei registri per eseguire calcoli aritmetici e logici, ci sono istruzioni che utilizzano questi registri con un uso particolare e specializzato, come segue:

  • Registro AX: Il registro AX è il registro accumulatore, viene utilizzato per operazioni di input/output, moltiplicazione e divisione (gli ultimi due insieme al registro DX)
  • Registro BX: il registro BX è il registro di base ed è l'unico registro per uso generico che può essere un indice per l'indirizzamento indicizzato.
  • Registro CX: il registro CX è noto come registro contatore. Può contenere un valore per controllare il numero di ripetizioni di un ciclo o un valore per lo spostamento di bit.
  • Registro DX: il registro DX è il registro dati. In alcune operazioni, questo registro indica il numero della porta di ingresso/uscita e nelle operazioni di moltiplicazione e divisione a 16 bit viene utilizzato insieme all'accumulatore AX.

Indice dei record

I registri SI e DI sono disponibili per l'indirizzamento indicizzato e le operazioni sulle stringhe.

  • Registro SI: il registro dell'indice di origine a 16 bit è richiesto per alcune operazioni sulle stringhe di caratteri. Il SI è associato al segmento DS.
  • Registro DI: il registro dell'indice di destinazione è richiesto anche per alcune operazioni sulle stringhe. Il DI è associato al segmento ES.

Record del puntatore

I registri SP (stack pointer) e BP (base pointer) sono associati al registro SS e consentono al sistema di accedere ai dati nel segmento dello stack.

  • Registro SP: il puntatore dello stack a 16 bit è associato al segmento SS e fornisce un valore di offset che fa riferimento alla parola corrente in elaborazione nello stack. Il sistema gestisce automaticamente questo registro, sebbene il programma possa eseguire determinate manipolazioni con esso.
  • Registro BP: il puntatore di base a 16 bit semplifica il riferimento ai parametri all'interno dello stack.

Segnala record

Si tratta di un registro a 16 bit , di cui nove servono per indicare lo stato attuale della macchina e il risultato dell'elaborazione. Molte istruzioni aritmetiche e di confronto cambiano lo stato delle bandiere e, sulla base di esse, si possono prendere decisioni per determinare l'azione successiva.

La tabella contiene 16 posizioni (da 0 a 15), che sono i 16 bit del registro flag, numerati da destra a sinistra. La posizione 0 si troverà a destra e la posizione 15 a sinistra.

- - - - DI DF SE TF SF ZF - AF - FAQ - CF

I bit flag sono i seguenti:

  • OF (overflow, overflow): indica l'overflow del bit di ordine più alto dopo un'operazione aritmetica di numeri con segno (1=overflow esistente; 0=overflow non esiste). Per le operazioni senza segno, questo flag viene ignorato.
  • DF (indirizzo): controlla la selezione di incremento o decremento dei registri SI e DI nelle operazioni di stringa di caratteri (1=decremento automatico; 0=incremento). Il flag DF è controllato dalle istruzioni STD e CLD.
  • IF (Interrupt): controlla l'attivazione degli interrupt (1=abilita gli interrupt; 0=disabilita gli interrupt). L' interrupt non mascherabile è l'unico che non può essere bloccato da questo flag. Lo stato del flag IF è controllato con le istruzioni STI e CLI.
  • TF (trap): consente il funzionamento del processore in modalità debug (passo dopo passo)
  • SF (segno): contiene il segno risultante di un'operazione aritmetica (0=positivo; 1=negativo).
  • ZF (zero): Indica il risultato di un'operazione aritmetica o di confronto (0=risultato diverso da zero; 1=risultato uguale a zero).
  • AF (riporto ausiliario): contiene il riporto del bit 3. Questo flag viene testato con le istruzioni DAA e DAS per impostare il valore di AL dopo un'addizione o sottrazione BCD .
  • PF (parità): Indica se il numero di bit 1, del byte meno significativo di un'operazione, è pari (0=numero di bit 1 è dispari; 1=numero di bit 1 è pari).
  • CF (riporto): contiene il riporto del bit di ordine superiore dopo un'operazione aritmetica; memorizza anche il contenuto dell'ultimo bit in un'operazione di spostamento o rotazione.

Record di segmento

Definiscono aree di 64 Kb all'interno dello spazio di indirizzi di 1 Mb dell'8086. Queste aree possono sovrapporsi completamente o parzialmente. Non è possibile accedere ad una locazione di memoria non definita da un segmento: se necessario occorre spostarne una.

  • Registro CS: DOS memorizza l'indirizzo iniziale del segmento di codice di un programma nel registro CS. Questo indirizzo di segmento, più un valore di offset nel registro IP (Instruction Pointer), indica l'indirizzo di un'istruzione che viene prelevata per l'esecuzione. Ai fini della normale programmazione, non è necessario fare riferimento al registro CS.
  • Registro DS: l'indirizzo iniziale di un segmento di dati del programma è memorizzato nel registro DS. Questo indirizzo, più un valore di offset in un'istruzione, genera un riferimento alla posizione di un byte specifico nel segmento di dati.
  • Registro SS: Il registro SS consente il posizionamento di uno stack in memoria, per la memorizzazione temporanea di indirizzi e dati. DOS memorizza l'indirizzo iniziale del segmento dello stack di un programma nel registro SS. Questo indirizzo di segmento, più un valore di offset nel registro del puntatore dello stack (SP), indica la parola corrente sullo stack indirizzato. Ai fini della normale programmazione, non è necessario fare riferimento al registro SS.
  • Registro ES: alcune operazioni sulle stringhe utilizzano il registro aggiuntivo del segmento per gestire l'indirizzamento della memoria. Il registro ES è associato al registro DI (Indice). Un programma che richiede l'uso del registro ES può inizializzarlo con un indirizzo di segmento appropriato.

Registro puntatore istruzioni

Il registro IP a 16 bit contiene l'offset di indirizzo della successiva istruzione da eseguire. L'IP è associato al registro CS nel senso che l'IP indica l'istruzione corrente all'interno del segmento di codice che è attualmente in esecuzione in memoria.

Accesso alla memoria e alla porta

Entrambi i microprocessori hanno una gamma di 65536 indirizzi di ingresso/uscita a cui è possibile accedere come porte a 8 o 16 bit. Nella parte inferiore della memoria ci sono 256 vettori di interrupt .

Questi processori utilizzavano un indirizzo a 20 bit che consentiva loro di accedere fino a 1 MB di memoria . I suoi registri interni erano lunghi solo 16 bit, quindi è stato sviluppato un meccanismo che utilizza i registri di segmento per accedere ai megabyte di memoria. L'8086 e l'8088 avevano quattro registri di segmento a 16 bit (CS, DS, ES e SS). Invece di fornire i 4 bit mancanti per indirizzare i 20 bit, come la maggior parte dei processori segmentati, l'8086 e l'8088 spostano il contenuto del registro di segmento di 4 bit a sinistra e lo aggiungono a un indirizzo di memoria a 16 bit dai registri di indice (BX , SI, DI, BP, SP, IP) e opzionalmente una costante, il risultato è l'indirizzo effettivo. Questo è spesso considerato un cattivo design, sebbene possa essere accettabile e persino utile in linguaggio assembly . Al contrario, crea confusione quando i puntatori vengono utilizzati in modo estensivo (come nel linguaggio C ), perché è possibile che due puntatori con valori diversi puntino allo stesso indirizzo di memoria. Questo schema di segmento è stato modificato nell'Intel 80286 e successivamente nell'Intel 80386 .

Segmentazione

Image
Calcolo dell'indirizzo effettivo utilizzando un segmento e un offset. Il segmento (16 bit) viene spostato di 4 bit a sinistra (moltiplicato per 16) e il registro degli indirizzi (16 bit) viene aggiunto ad esso, risultando in un indirizzo lineare a 20 bit.

C'erano anche quattro registri di segmento a 16 bit che consentivano all'8086 e all'8088 di accedere a un megabyte di memoria in un modo insolito. Invece di concatenare il registro del segmento con il registro degli indirizzi, come nella maggior parte dei processori il cui spazio degli indirizzi ha superato la dimensione del registro, l'8086 e l'8088 hanno spostato il segmento a 16 bit solo quattro bit a sinistra prima di aggiungere un offset a 16 bit (16 × segmento + offset), producendo un indirizzo esterno a 20 bit (effettivo o fisico) dalla coppia segmento:offset a 32 bit. Di conseguenza, ogni indirizzo esterno potrebbe essere referenziato da 2 12 = 4096 differenti segmenti:coppie di offset. La separazione di 16 byte tra le basi del segmento (dovuta all'offset di 4 bit) è stata chiamata paragrafo . Sebbene considerato ingombrante e ingombrante da molti programmatori, questo schema presentava anche vantaggi; un piccolo programma (meno di 64 KB) potrebbe essere caricato a partire da un offset fisso (come 0) nel proprio segmento, evitando la necessità di riposizionamento , con al massimo 15 byte di allineamento sprecato.

I compilatori per la famiglia 8086 supportavano comunemente due tipi di puntatori , vicini e lontani. I puntatori vicini erano offset a 16 bit implicitamente associati al codice o al segmento di dati del programma e quindi potevano essere utilizzati solo all'interno di parti di un programma sufficientemente piccole da adattarsi a un segmento. I puntatori lontani erano segmenti a 32 bit: coppie di offset risolte in indirizzi esterni a 20 bit. Alcuni compilatori supportavano anche puntatori enormi, che erano come puntatori lontani tranne per il fatto che l' aritmetica del puntatore su un puntatore enorme lo trattava come un puntatore lineare a 20 bit, mentre l'aritmetica del puntatore su un puntatore enorme avvolto attorno) all'interno del suo offset di 16 bit senza toccare il segmento parte dell'indirizzo.

Per evitare la necessità di specificare vicino e lontano per numerosi puntatori, strutture di dati e funzioni, i compilatori supportano anche "modelli di memoria" che specificano le dimensioni predefinite dei puntatori. I modelli minuscolo (64 K massimo), piccolo (128 K massimo), compatto (dati > 64 K), medio (codice > 64 K), grande (codice e dati > 64 K) ed enorme (array individuali > 64 K), coperto vicino al puntatore combinazioni. lontano ed enorme per codice e dati. Il modello minuscolo significava che codice e dati erano condivisi in un unico segmento, proprio come la maggior parte dei processori basati su 8 bit, e potevano essere usati per creare file .com, ad esempio. Le librerie precompilate spesso erano disponibili in più versioni compilate per vari modelli di memoria.

Secondo Morse e altri, i progettisti hanno effettivamente pensato di utilizzare un offset di 8 bit (invece di 4 bit), per creare uno spazio di indirizzi fisici di 16 MB. Tuttavia, poiché ciò avrebbe costretto i segmenti a iniziare con limiti di 256 byte e, intorno al 1976, 1 MB era considerato troppo grande per un microprocessore, l'idea è stata scartata. Inoltre, non c'erano abbastanza pin disponibili in un pacchetto economico da 40 pin. [ 11 ]

In linea di principio, lo spazio degli indirizzi della serie x86 avrebbe potuto essere esteso nei processori successivi, aumentando il valore dell'offset, a condizione che le applicazioni ricevessero i loro segmenti dal sistema operativo e non facessero ipotesi sull'equivalenza di diverse coppie segmento:offset. [ 12 ] In pratica l'uso di puntatori "grandi" e meccanismi simili era diffuso ed è diventato possibile l'indirizzamento piatto a 32 bit, con i registri di offset a 32 bit nell'80386 che alla fine estendevano gli indirizzi limite di intervallo in un modo più generale.

Porting del vecchio software

I piccoli programmi potrebbero ignorare la segmentazione e utilizzare semplicemente l'indirizzo flat a 16 bit. Ciò ha consentito di trasferire facilmente il software a 8 bit su 8086 e 8088. Gli autori di MS-DOS ne hanno approfittato fornendo un'interfaccia di programmazione dell'applicazione molto simile a quella di CP/M e includendo il formato file più semplice eseguibile .com, identico al CP/M. Questo era importante quando l'8086/8088 e l'MS-DOS erano nuovi, perché consentivano a molte applicazioni CP/M (e altre) esistenti di diventare prontamente disponibili, facilitando notevolmente l'accettazione della nuova piattaforma.

Indirizzo della prima istruzione eseguibile: FFFF:0

I processori 8088 e 8086, in base alla progettazione hardware, hanno eseguito la loro prima istruzione all'indirizzo FFFF:0 (16 byte sotto il limite della loro capacità di memoria di 1 MB con i loro 20 bit di indirizzo). In quest'area deve essere presente una ROM per poter eseguire le sue istruzioni all'accensione o al riavvio del computer (o dispositivo). Nel caso del PC IBM , in quell'area c'era il BIOS ROM del PC IBM e la prima istruzione eseguita era un salto (JMP) all'inizio del codice POST ( Power On Self Test ), dove c'era il codice da controllare la CPU e rivedere e inizializzare i diversi componenti hardware e il BIOS del computer stesso, e alla fine è stato eseguito il Boot Strap Loader , che ha avviato il Bootstrap . [ 13 ] I microprocessori della linea x86 hanno ereditato questo indirizzo di memoria (FFFF:0) per la prima istruzione eseguibile.

Modalità di indirizzamento

I processori 8086 e 8088 avevano le seguenti modalità di indirizzamento :

  • Implicito . I dati sono impliciti nell'istruzione stessa. Ad esempio STC, STDe STI, (Set Carry, Set Direction e Set Interrupts) accendono il flag corrispondente indicato nell'istruzione stessa. CBW(Convert Byte to Word) estende il bit di segno del registro AL ad AX. Né AL né AX sono specificati, poiché l'istruzione CBWfunziona implicitamente su di essi.
  • Immediato . I dati da operare sono immediatamente dopo l'opcode dell'istruzione. Ehi,MOV AX, 5
  • Registro . I dati sono in un secondo registro. Es MOV AX, BX.. Qui, i dati sono nel registro BX
  • Diretto . L'indirizzo dei dati si trova nel campo dell'indirizzo dell'opcode. Es MOV AX, [100h].. Qui il contenuto degli indirizzi 100h e 101h viene spostato (copiato) nel registro AX. In questo caso vengono spostati due byte poiché AX è a 16 bit. Se fosse MOV BL, [100h], verrebbe spostato solo un byte poiché BL è un registro a 8 bit.
  • Indiretto . I dati sono specificati da una combinazione di registri di indice e di base e potrebbe esserci un offset
    • base . Un registro di base (BX o BP) ha l'indirizzo da cui verranno presi i dati. per esempioMOV AX, [BX]
    • Indice . Un registro indice (SI o DI) ha l'indirizzo da cui verranno presi i dati. per esempioMOV AX, [SI]
    • Base + Offset . I dati verranno prelevati dall'indirizzo indicato dalla somma di un registro di base più un offset. per esempioMOV AX, [BP + 7]
    • Indice + Offset . I dati saranno prelevati dall'indirizzo indicato dalla somma di un registro indice più un offset. per esempioMOV AX, [DI + 7]
    • Base + Indice . I dati saranno prelevati dall'indirizzo indicato dalla somma di un registro di base più un registro di indice. per esempioMOV AX, [BX + SI]
    • Base + Indice + Offset . I dati saranno prelevati dall'indirizzo indicato dalla somma di un registro di base, più un registro di indice, più un offset. per esempioMOV AX, [BX + SI + 9]

Appuntare

pin 8086 e 8088. Le linee del bus degli indirizzi sono visualizzate in rosso, le linee del bus dei dati in blu e le linee del bus di controllo in verde. Le linee del bus di alimentazione sono visualizzate in nero. Questi processori effettuano il multiplexing del bus di indirizzi con il bus di dati e di controllo. Nell'8086 si vedono i pin da 2 a 16 e i pin da 35 a 39 con doppia funzionalità, ad un certo momento trasporta l'indirizzo ed in un altro momento i dati entrano o escono (o escono informazioni da alcune linee del bus di controllo).

Sull'8088, i pin da 9 a 16 sono condivisi tra l'indirizzo e i bus di dati e i pin da 35 a 38 tra i bus di indirizzo e di controllo.

8086 piedinature

                  +--\_/--+
            GND 1| |40 Vdc (+5V)
<-- A14 <-> D14 2| |39 A15 --> D15 <->
<-- A13 <-> D13 3| |38 A16 --> S3 -->
<-- A12 <-> D12 4| |37 A17 --> S4 -->
<-- LA11 <-> LA11 5| |36 A18 --> S5 -->
<-- LA10 <-> LA10 6| |35 A19 --> S6 -->
<-- LA9 <-> RE9 7| |34 !BHE/S7 -->
<-- LA8 <-> RE8 8| |33 MN/!MX <--
<-- LA7 <-> RE7 9| Intel |32 !RD -->
<-- LA6 <-> RE6 10| 8086 |31 ATTESA, !RQ/!GTO <->
<-- LA5 <-> RE5 11| |30 HLDA, !RQ/!GT1 <->
<-- LA4 <-> LA4 12| |29 !WR, !LOCK -->
<-- LA3 <-> RE3 13| |28 M/!IO, !S2 -->
<-- LA2 <-> RE2 14| |27 DT/!R, !S1 -->
<-- LA1 <-> RE1 15| |26 !DEN, !S0 -->
<-- A0 <-> D0 16| |25 ALE, QS0 -->
        --> NMI 17| |24 !INTA, QS1 -->
        -->INVIO 18| |23 !PROVA <--
        -->CLK 19| |22 PRONTO <--
            GND 20| |21 RESET <--
                  +-------+

8088 piedinature

A parte il bus dati esterno, che è ridotto a 8 bit, la differenza con l'8086 è minima.

                 +--\_/--+
           GND   1| |40 Vdc (+5V)
       <-- A14   2| |39 A15 -->
       <-- A13   3| |38 A16 -->  S3 -->
       <-- A12   4| |37 A17 -->  S4 -->
       <-- A11   5| |36 A18 -->  S5 -->
       <-- A10   6| |35 A19 -->  S6 -->
       <-- A9   7| |34 !SSO .... ALTO , -->
       <-- A8   8| |33 MN/!MX           <--
 <-> RE7  <-- LA7   9| Intel |32 !RD              -->
 <-> RE6  <-- LA6 10| 8088 |31 ATTESA .... !RQ/!GTO <->
 <-> D5  <-- A5 11| |30 HLDA .... !RQ/!GT1 <->
 <-> D4  <-- A4 12| |29 !WR ..... !LOOK     -->
 <-> RE3  <-- LA3 13| |28 M/!IO ... !S2       -->
 <-> RE2  <-- LA2 14| |27 DT/!R ... !S1       -->
 <-> D1  <-- A1 15| |26 !DEN .... !S0       -->
 <-> D0  <-- A0 16| |25 ALE ..... QS0       -->
       --> NMI 17| |24 !INTA ... QS1       -->
       -->INVIO 18| |23 !PROVA            <--
       -->CLK 19| |22 PRONTO            <--
           GND 20| |21 RIPRISTINO            <--
                 +-------+

Performance

Sebbene in qualche modo oscurato da altre scelte di design su questo particolare chip, il bus multiplex ha limitato leggermente le prestazioni; i trasferimenti di importi a 16 o 8 bit sono stati eseguiti in cicli di accesso alla memoria di quattro cicli di clock, che rispetto alle tipiche CPU a 8 bit contemporanee, erano più veloci di importi a 16 bit, sebbene più lenti di importi a 16 bit. 8 bit. Poiché le istruzioni variavano da uno a sei byte, il recupero e l'esecuzione sono stati eseguiti contemporaneamente (come avviene ancora negli odierni processori x86): l'unità di interfaccia bus ha inviato il flusso di istruzioni all'unità di interfaccia bus.Esecuzione tramite una coda di prelettura di 6 byte per il 8086 e 4 byte per l'8088 (una forma di pipeline debolmente accoppiata ), velocizzando le operazioni sui registri e con gli operandi immediati , mentre le operazioni di memoria purtroppo sono diventate più lente; quattro anni dopo, questo problema di prestazioni è stato risolto con 80186 , 80188 e 80286 .

Tuttavia, l'8086 e l'8088 erano dotati di un'architettura completa a 16 bit, con un'ALU a larghezza intera , il che significa che le istruzioni aritmetiche a 16 bit potevano ora essere eseguite in un singolo ciclo dell'ALU, anziché in due cicli utilizzando il riporto utilizzato dal 8080 e 8085 , velocizzando notevolmente tali istruzioni. Aveva anche prestazioni migliori con operazioni logiche a 16 bit. Combinato con l'ortogonalizzazione delle operazioni rispetto ai tipi di operandi e alle modalità di indirizzamento , oltre ad altri miglioramenti, ha reso il miglioramento delle prestazioni rispetto all'8080 o all'8085 piuttosto significativo, nonostante i casi in cui i chip più vecchi potessero essere più efficienti e veloci.

Tempi di esecuzione per istruzioni tipiche
(in cicli di clock) [ 14 ]
Istruzione Registrazione-Registrazione Registrazione immediata Registro-Memoria Memoria-Registro Memoria immediata
MOV Due 4 8+EA 9+EA 10+EA
alluminio 3 4 9+AE, 16+EA, 17+EA
JMP Registrati => 11; Etichetta => 15; Condizione, Etichetta => 16
moltiplicazione intera 70~160 (a seconda dell'operando e della dimensione dei dati ) più EA
divisione intera con segno 80~190 (a seconda dell'operando e della dimensione dei dati ) più EA
  • EA = tempo per calcolare l'indirizzo effettivo (EA), che va da 5 a 12 cicli sull'8086 e fino a 19 sull'8088.
  • I tempi sono nel migliore dei casi, a seconda dello stato di precaricamento, dell'allineamento delle istruzioni e di altri fattori.

Come si evince da queste tabelle, le operazioni sui registri e sugli operandi immediati erano veloci (tra 2 e 4 cicli), mentre le istruzioni con operandi di memoria e JMP (salto incondizionato) erano assolutamente lente; i luppoli richiedevano più cicli rispetto ai più semplici 8080 e 8085. L'8088 (utilizzato nel PC IBM) era ulteriormente ostacolato dal suo bus dati a 8 bit più stretto. I motivi per cui la maggior parte delle istruzioni relative alla memoria erano lente erano tre:

  • Le unità di lettura (fetch) ed esecuzione liberamente accoppiate sono efficienti per il prefetch delle istruzioni, ma non per i salti (JMP) e l'accesso casuale ai dati (senza utilizzare misure speciali).
  • Non è stato fornito un sommatore dedicato per il calcolo dell'indirizzo; le routine del microcodice dovevano utilizzare l'ALU principale per questo (sebbene esistesse un sommatore dedicato per segmento + offset).
  • L'indirizzo e i bus dati sono stati multiplexati , forzando un ciclo del bus leggermente più lungo (33~50%) rispetto ai tipici processori a 8 bit contemporanei.

Tuttavia, le prestazioni di accesso alla memoria sono state drasticamente migliorate con i chip Intel di nuova generazione. L' 80186 , l' 80188 e l' 80286 avevano hardware dedicato per il calcolo degli indirizzi, risparmiando molti cicli, e l'80286 aveva anche bus di dati e indirizzi separati (non multiplexati).

Chip di supporto

L'8086/8088 utilizza alcuni circuiti integrati di supporto realizzati da Intel:

La funzionalità della maggior parte di questi chip di supporto continua ad esistere nei computer con architettura x86 fino ad oggi, solo che sono stati integrati per molto tempo e non sono più chip individuali e ora fanno parte del chipset del computer (la maggior parte sono integrati sul southbridge ).

Coprocessore numerico

L'8086/8088 non aveva istruzioni in virgola mobile e l'esecuzione di operazioni su numeri reali richiedeva librerie con routine software in virgola mobile. I computer con l'8086/8088 avevano in genere una presa a 40 pin in cui era possibile collegare un coprocessore matematico opzionale per una capacità in virgola mobile basata su hardware/microcodice molto più veloce. L' Intel 8087 era il coprocessore matematico standard per l'8086 e l'8088, che operava internamente con numeri a 80 bit. Produttori come Cyrix (compatibile con 8087) e Weitek (non compatibile con 8087) alla fine hanno escogitato un coprocessore a virgola mobile ad alte prestazioni che competeva con l'8087, nonché il successivo Intel 80387 a prestazioni più elevate .

Versioni con chip

Originariamente la frequenza di clock era limitata a 5 MHz (il PC IBM utilizzava 4,77 MHz, 4/3 della velocità di burst colore NTSC standard ) , ma le ultime versioni HMOS erano specificate per 10 MHz. Le versioni HMOS-III e CMOS per cui erano state realizzate da molto tempo (almeno per un certo periodo negli anni '90) per i sistemi embedded , sebbene i loro successori, l' 80186/ 80188 ( che include alcune periferiche su chip), siano stati più popolari per l'uso embedded.

Derivati ​​e cloni

Image
Il clone sovietico KP1810BM86.
Image
OKI QFP- 56 M80C86A

Le versioni compatibili e in molti casi migliorate sono state prodotte da Fujitsu , Harris / Intersil , OKI , Siemens AG , Texas Instruments , NEC , Mitsubishi e AMD . Ad esempio, la coppia NEC V20 e NEC V30 era compatibile hardware con l'8088 e l'8086, rispettivamente, ma incorporava il set di istruzioni 80186 insieme ad alcuni (ma non tutti) i miglioramenti della velocità 80186, fornendo solo la sostituzione del chip, il capacità di aumentare il set di istruzioni e la velocità di elaborazione senza che i produttori debbano modificare i loro progetti. Tali processori CMOS compatibili con 8086/8088 relativamente semplici ea bassa potenza sono ancora utilizzati nei sistemi embedded.

L' industria elettronica dell'Unione Sovietica è stata in grado di replicare l'8086 con lo spionaggio industriale e il reverse engineering . il chip risultante, il K1810BM86, era binario e compatibile con i pin con l'8086, ma non era meccanicamente compatibile perché utilizzava misurazioni metriche.

L'8088 e l'8086 erano i rispettivi core dei computer desktop compatibili con PC, ES1840 ed ES1841 , realizzati dai sovietici. Tuttavia, questi computer presentavano differenze hardware significative rispetto ai loro veri prototipi e il circuito del bus dati/indirizzo è stato progettato indipendentemente dai prodotti Intel. [ citazione necessaria ] L'ES1841 è stato il primo PC a supportare il dimensionamento dinamico del bus (brevetto USA n. 4.831.514). Successivamente, alcuni dei principi dell'ES1841 furono adottati nella PS/2 (brevetto statunitense n. 5.548.786) e in alcune altre macchine (pubblicazione della domanda di brevetto britannica n. GB-A-2211325, pubblicata il 28 giugno 1989).

Microcomputer che utilizzavano l'i8086 o l'i8088

PC IBM e XT

Il PC IBM originale è stato il microcomputer più influente a utilizzare l'8088. Utilizzava una frequenza di clock di 4,77 MHz (4/3 della velocità di burst di colore di NTSC ). Alcuni degli ingegneri IBM e altri dipendenti volevano utilizzare il processore IBM 801 , alcuni avrebbero preferito il nuovo Motorola 68000 , [ 15 ] mentre altri sostenevano un piccolo e semplice microprocessore simile a quello che era stato utilizzato nei precedenti personal computer (come come il TRS-80 o l' Apple II ). [ 16 ] Tuttavia, IBM aveva già una storia di utilizzo di chip Intel nei suoi prodotti e aveva anche acquisito i diritti per produrre la famiglia 8086. [ 17 ] Un altro fattore era che l'8088 consentiva al computer di essere basato su un design modificato del 8085 , in quanto potrebbe facilmente interfacciarsi con la maggior parte dei chip nMOS con bus dati a 8 bit, ovvero componenti esistenti e maturi, e quindi poco costoso. Ciò includeva circuiti integrati originariamente destinati al supporto e alle funzioni periferiche attorno all'8085 e processori simili (non esclusivamente di Intel) che erano già ben noti a molti ingegneri, riducendo ulteriormente i costi. [ 18 ]

L'immediato successore del PC IBM, l' IBM XT , utilizzava l'8088. Aveva un'architettura molto simile al PC, aggiungendo solo tre slot di espansione ai cinque del PC, un disco rigido, RAM aggiuntiva sulla scheda madre e un alimentatore .di potenza di maggiore capacità; ed eliminando l'interfaccia della cassetta.

I discendenti dell'8088 includono 80188 , 80186 , 80286 , 80386 , 80486 , Pentium e successivi processori compatibili con il software, che sono in uso oggi.

Cloni

La maggior parte dei cloni di IBM PC e XT utilizzavano Intel 8088 che funzionava a 4,77 MHz o superiore.Alcuni funzionavano a 8, 10 e persino 12 MHz.

Altri

Tra i microcomputer che utilizzavano l'8086 abbiamo i seguenti:

  • Il primo microcomputer commerciale basato su 8086 è stato il Mycron 2000.
  • L' elaboratore di testi IBM Displaywriter . [ citazione necessaria ]
  • Il computer professionale Wang, prodotto da Wang Laboratories
  • Il PC AT&T 6300 (costruito da Olivetti )
  • Il NEC PC-9801 (costruito da NEC )
  • Il primo Compaq Deskpro utilizzava un 8086 funzionante a 7,14 MHz, ma era in grado di eseguire schede di espansione progettate per IBM XT a 4,77 MHz .
  • L'FLT86 è un sistema di addestramento consolidato per la CPU 8086, che è ancora prodotto da Flite Electronics International Limited a Southampton , in Inghilterra .
  • I modelli IBM PS/2 25 e 30 sono stati costruiti con un 8086 a 8 MHz
  • La serie Tandy 1000 SL
  • Amstrad PC1512 , PC1640, PC2086, PC3086 e PC5086 utilizzavano l'8086 a 8 MHz.
  • Fino al 2002, la NASA utilizzava ancora la CPU 8086 originale sul kit di manutenzione a terra dello Space Shuttle Discovery , per prevenire la regressione del software che potrebbe derivare dall'aggiornamento o dal passaggio a cloni imperfetti. [ 19 ]

Vedi anche

Predecessori

Successori

Riferimenti

  1. ↑ utilizzando la logica pMOS del carico di potenziamento (richiede 14 V, ottenendo la compatibilità TTL avendo V CC a +5 V e V DD a -9 V)
  2. ↑ utilizzando la logica nMOS del carico di potenziamento non saturato (richiede una tensione di gate più elevata per le porte del transistor di carico)
  3. reso possibile con la logica nMOS del carico di esaurimento (l'8085 è stato successivamente realizzato utilizzando l'elaborazione HMOS, proprio come l'8086)
  4. ^ Nascita di uno standard: il microprocessore Intel 8086. Trent'anni fa, Intel ha rilasciato il processore 8086, introducendo l'architettura x86 che è alla base di ogni PC Windows, Mac o Linux prodotto oggi , PC World, 17 giugno 2008
  5. Rev.0 del set di istruzioni e l'architettura era pronta in circa 3 mesi, secondo Morse.
  6. Utilizzo di rubiliti , lavagne luminose, righelli, gomme da cancellare elettriche e un digitalizzatore (secondo Jenny Hernandez, membro del team di progettazione 8086, in una dichiarazione fatta sulla pagina web di Intel per il suo 25° compleanno).
  7. 8086 utilizzava meno microcodice rispetto a molti modelli della concorrenza, come l'MC68000 e altri
  8. Le RAM statiche veloci in tecnologia MOS (veloci quanto le RAM bipolari) sono state un prodotto importante per Intel durante questo periodo.
  9. CHMOS è il nome Intel per i circuiti CMOS prodotti utilizzando fasi di elaborazione molto simili a HMOS .
  10. Altri membri del team di progettazione erano Peter A. Stoll e Jenny Hernandez.
  11. ^ Intel da 8008 a 8086 di Stephen P. Morse et al.
  12. ^ Alcuni cloni 80186 hanno cambiato il valore di spostamento, ma non sono mai stati usati comunemente nei computer desktop.
  13. Manuale di riferimento tecnico per PC IBM (numero parte 6025008), pagina A-80 e A-5
  14. Manuale di riferimento di Microsoft Macro Assembler 5.0 . Microsoft Corporation. 1987. «I tempi e le codifiche in questo manuale sono usati con il permesso di Intel e provengono dalle seguenti pubblicazioni: Intel Corporation. iAPX 86, 88, 186 e 188 Manuale dell'utente, Riferimento del programmatore, Santa Clara, California. 1986. »  (Allo stesso modo per iAPX 286, 80386, 80387.)
  15. Successivamente utilizzato per il computer da laboratorio IBM Instruments 9000
  16. ^ C'erano alcune voci secondo cui (l'allora piccola) Microsoft riuscì in qualche modo a persuadere IBM a utilizzare l'8088, perché aveva capacità a 16 bit maggiori e migliori rispetto alla maggior parte delle altre CPU "8-bit".
  17. In cambio della concessione a Intel dei diritti sui suoi progetti di memoria a bolle . Tuttavia, a causa della forte concorrenza dei produttori giapponesi che sono stati in grado di ridurre i costi, Intel ha presto lasciato questo mercato e ha spostato l'attenzione sui microprocessori.
  18. 68000 componenti non erano ampiamente disponibili all'epoca, sebbene potesse utilizzare in una certa misura i componenti Motorola 6800 .
  19. Per le parti vecchie, la NASA audacemente va... su eBay , 12 maggio 2002

Collegamenti esterni