Microprocessore Intel 8086
Fondamenti architetturali
Evoluzione in pillole
Introdotto nel 1978, il chip 8086 a 16 bit
conteneva appena 29.000 transistor e
operava a 5 MHz.
In confronto, l'attuale processore Pentium 4
contiene 55 milioni di transistor e opera a
3,06 GHz, una velocità più di 600 volte più
elevata.
Struttura esterna
Il package ha una struttura
dual in line
che significa: “due file di 20 piedini (pin) parallele”
Piedinatura (pin-out)
Ogni piedino fornisce
una funzionalità
diversa.
Il CLOCK ad esempio
scandisce gli intervalli
di tempo sulla base dei
quali avvengono tutte
le elaborazioni
Schema a blocchi
Registri
generali
CU
ALU
Si riconoscono gli elementi fondamentali della macchina di Von Neumann
BIU – Bus Interface Unit
Contiene più istruzioni prelevate dalla memoria
Serve per costruire gli indirizzi
EU – Execution Unit
Registri degli operandi e dei flags
Il meccanismo di PIPELINE
Grazie alla struttura suddivisa nelle due componenti autonome (BIU ed EU)
l’8086 è in grado di gestire le elaborazioni con modalità pipeline.
La pipeline dati è una tecnologia utilizzata dai microprocessori per
incrementare il throughput, ovvero la quantità di istruzioni eseguite in una
data quantità di tempo.
L'elaborazione di un istruzione da parte di un processore si
compone di cinque passaggi fondamentali:
IF: Lettura dell'istruzione da memoria
ID: Decodifica istruzione e lettura operandi da registri
EX: Esecuzione dell'istruzione
MEM: Attivazione della memoria (solo per certe istruzioni)
WB: Scrittura del risultato nel registro opportuno
Elaborazione sequenziale
Se ipotizziamo un tempo di 1 sec. per ognuna delle fasi, il tempo totale
sarà 15 sec.
Elaborazione in pipeline
Se ipotizziamo un tempo di 1 sec. per ognuna delle fasi, il tempo totale
sarà 9 sec. con un risparmio rispetto alla soluzione precedente di 6 sec.
Indirizzamento della memoria
L’8086 rappresenta una evoluzione di una precedente serie denominata 8080
in cui l’indirizzamento di memoria centrale era a 16 bit.
Con 16 bit possiamo indirizzare al massimo 64K (65536) locazioni.
I progettisti stabilirono che l’8086, pur conservando alcune delle
impostazioni precedenti, dovesse indirizzare fino ad 1M (1048576), inoltre
stabilirono che i programmatori potessero avere una visione della memoria
centrale suddivisa in aree diverse dedicate rispettivamente al codice, ai dati
e allo stack.
L’8086 possiede un BUS indirizzi a 20 bit.
Con 20 bit possiamo indirizzare appunto 1048576 locazioni.
Segmentazione della memoria
Numero del segmento
La tecnica utilizzata per indirizzare una
maggiore quantità di memoria venne definita
segmentazione, cosa che prevede di
suddividere l’indirizzo in due parti chiamate
rispettivamente SEGMENT e OFFSET
ognuna in grado di rappresentare un numero
da 16 bit.
RAM
Indirizzo all’interno del segmento
Calcolo dell’indirizzo effettivo
Registri a 16 bit
CS
x 10h
PC
+
Indirizzo a 20 bit
Calcolo dell’indirizzo effettivo : esempio
CS
1AB3h (in binario 1101010110011)
PC
x 10h
051Fh ( in binario 10100011111)
1AB30h + 051Fh
1B04Fh ( in binario 11011000001001111)
EA = Effective Address
I registri
I registri dell’8086 sono classificati in :
•
•
•
•
Registri generali
Registri puntatori
Registri di segmento
Registro di stato (PSW o Program Status Word)
Le dimensioni di ogni registro sono di 16 bit
I registri generali
H = High
Registro accumulatore
L = Low
AX
BX
Registro contatore
CX
AH
BH
CH
DH
AL
BL
CL
DL
DX
Sono registri da 16 bit utilizzabili anche come registri da 8 bit
detti anche general purpose per l’uso generale che si fa di
questi registri nei programmi (Ad ogni registro viene inoltre
assegnato un compito particolare rispetto alle varie istruzioni)
I registri puntatori
source index
SI
destination index
DI
Utilizzati dalle istruzioni che
operano sulle stringhe
stack pointer
SP
BP
IP
Utilizzati dalle istruzioni che
operano sullo stack
Sono registri a 16 bit non suddivisibili in byte, che vengono utilizzati
per contenere la parte OFFSET degli indirizzi di memoria relativi agli
operandi. Il registro IP (parte offset del Program Counter) pur essendo
un registro puntatore non può essere utilizzato dal programmatore in
quanto gestito direttamente dal sistema.
I registri di segmento
code segment
CS
data segment
DS
Punta al
segmento che
contiene le
istruzioni
Punta al
segmento che
contiene i dati
extra segment
ES
Punta al
segmento che
contiene
eventualmente
altri dati
stack segment
SS
Punta al
segmento che
contiene lo
stack
Sono registri a 16 bit che identificano i diversi segmenti che
contengono il codice e i dati di un programma. Possono essere
modificati dal programmatore
Il registro di stato (PSW)
E’ un registro da 16 bit che viene utilizzato bit per bit.
Solo 9 sono significativi. Sei sono solo leggibili tre sono anche scrivibili.
(La letterina F sta per flag)
OF
SF
ZF
AF
PF
CF
DF IF
TF
overflow
traboccamento
sign
zero
segno
auxiliary
Risultato
nullo
parity
carry
riporto
I flag vengono settati(cioè valgono 1) dalle istruzioni aritmetiche e logiche
Il program counter
Il program counter è costituito dalla coppia di registri CS:IP cioè
dal segmento che individua l’indirizzo della memoria contenente le
istruzioni e dal puntatore all’istruzione da eseguire all’interno del
segmento.
Segmento Stack
Segmento Extra
Segmento Dati
Segmento Codice
Programma in memoria
Lo stack
Si chiama stack un area della
memoria in cui vengono
“accatastati” i dati in modo
tale da poter recuperare gli
stessi a partire dall’ultimo
inserito, secondo una
modalità definita LIFO.
SS:SP
prima locazione dello stack
seconda locazione dello stack
terza locazione dello stack
TOP
…. locazione dello stack
PUSH
Dato 1
PUSH
Dato 2
Viene utilizzato, in genere, per la
gestione dei sottoprogrammi.
ultima locazione dello stack
STACK
BOTTOM
Chip
In informatica il termine chip può significare:
• circuito integrato cioè un dispositivo elettronico costituito dall'integrazione di
un circuito elettronico su di un substrato di materiale semiconduttore (in genere
silicio, ma a volte anche arseniuro di gallio o altri).
• microprocessore (spesso abbreviato con µP) cioè un componente
elettronico digitale formato da transistor racchiuso in uno o più circuiti integrati.
Uno o più processori sono utilizzati come CPU da un sistema di elaborazione
digitale come può essere un personal computer, un palmare, un telefono
cellulare o un altro dispositivo digitale.
Transistor
I transistor vengono impiegati in ambito elettronico, principalmente,
come amplificatori di segnali elettrici o come interruttori elettronici
comandati da segnali elettrici
Processo di fabbricazione di un transistor
Flag
Un flag (parola inglese che significa bandierina) in
informatica è una variabile che può assumere solo
due stati ("vero" o "falso", "on" e "off", "1" e "0",
"acceso" e "spento") e che segnala, con il suo
valore, se un dato evento si è verificato oppure no,
o se il sistema è in un certo stato oppure no.
LIFO
Il termine LIFO è acronimo inglese di Last In First Out (Ultimo ad
entrare, primo ad uscire).
Esprime il concetto relativo al modo di immagazzinare dati in cui
l'ultimo valore introdotto è il primo ad uscire. Si rappresenta di
solito con una pila di libri o di piatti, in cui l'ultimo appoggiato in
cima è necessariamente il primo ad essere prelevato, mentre il
primo introdotto è raggiunto per ultimo