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 PC x 10h + Indirizzo a 20 bit
Calcolo dell’indirizzo effettivo : esempio CS 1AB3h (in binario 1101010110011) PC 051Fh ( in binario 10100011111) x 10h 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 AH AL BH BL CH CL DH DL H = High L = Low AX BX CX Registro accumulatore AX AH AL BH BL CH CL DH DL BX Registro contatore CX 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 SI DI SP BP IP source index destination index stack pointer SI DI SP BP IP Utilizzati dalle istruzioni che operano sulle stringhe 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 CS DS ES SS code segment data segment extra segment stack segment CS DS ES SS Punta al segmento che contiene eventualmente altri dati Punta al segmento che contiene le istruzioni Punta al segmento che contiene i dati 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 SS:SP 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. prima locazione dello stack TOP seconda locazione dello stack terza locazione dello stack …. locazione dello stack PUSH Dato 1 PUSH Dato 2 BOTTOM ultima locazione dello stack Viene utilizzato, in genere, per la gestione dei sottoprogrammi. STACK
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