Generalità dei microprocessori
Intel
Microprocessori
Set istruzioni 8086
Francesca Del Giorno
III A “ E. Mattei”
Anno 2006/2007
MICROPROCESSORE
Un microprocessore è un componente elettronico digitale formato da
transistor racchiuso in uno o più circuiti integrati.
Uno o più processori sono utilizzati come CPU (control processing unit)che ha
il compito di eseguire il ciclo istruzioni, in pratica è in grado di effettuare
operazioni di lettura/scrittura della memoria centrale o dei registri di
imput/output e di interpretare i codici.
I microprocessori furono resi possibili dall’avvento dei microcomputer. Prima
le CPU erano realizzate con circuiti a bassa scala di integrazione che erano in
grado di contenere solo pochi transistor. Con il progresso della tecnologia si
riuscirono a integrare abbastanza transistor in un circuito integrato da
realizzare una CPU completa. Questo permise di ridurre i costi dei
microprocessori. Dagli anni 70 in poi i microprocessori sono
l’implementazione maggiormente utilizzata di CPU.
GENERALITA' SUI MICROPROCESSORI
Il microprocessore è costituito da un monocristallo di silicio estremamente puro,
sezionato finemente, quindi trattato ad altissime temperature in forni che contengono
vari tipi di impurità allo stato gassoso. Queste impurità devono legarsi alla struttura
reticolare del cristallo, influenzando la sua capacità di condurre elettricità. Il silicio
diventa così un semiconduttore ed è in grado quindi di resistere al passaggio di
corrente elettrica in misura maggiore rispetto ai normali conduttori come il rame, ma
non tanto quanto gli isolanti.
Il microprocessore (o unità centrale di elaborazione, CPU) è una elaborata combinazione
transistor, che si definisce circuito integrato. I circuiti integrati vengono adoperati nei
più svariati settori, dall'amplificazione dell'audio al controllo delle funzioni di un
microonde; i microprocessori si differenziano da altri circuiti integrati del genere per il
fatto che le variazioni elettriche, conseguenti ai segnali d'ingresso, si verificano
all'interno del processore stesso in base a particolari elaborazioni.
L'unità centrale di elaborazione assolve due funzioni fondamentali:
Governa tutte le operazioni del sistema, generando tutti i segnali occorrenti per il
funzionamento degli altri circuiti ad esso collegati.
Esegue tutti i calcoli aritmetici e logici.
Il processore può essere quindi suddiviso in due parti: l'unità di controllo (Control Unit) e
l'unità logico-aritmetica (ALU). E' presente inoltre una memoria locale, ovvero un
insieme di dispositivi, detti registri, che vengono utilizzati per il controllo dell'esecuzione
di un programma.
L'elaborazione avviene con il reperimento da parte della Control Unit dell'istruzione da
eseguire dalla memoria centrale all'indirizzo contenuto dal registro Program Counter.
L'istruzione viene trasferita nel registro Instruction Register e il Program Counter viene
incrementato in modo da puntare all'istruzione successiva. La CPU, dopo aver
interpretato l'istruzione, emette segnali che producono la sua esecuzione. Se sono
necessari calcoli, interviene l'ALU.
Il procedimento appena descritto attraverso il quale la CPU esegue un'istruzione prende
il nome di ciclo macchina, che può essere idealmente suddiviso in tre parti:
Nella fase di fetch la Control Unit reperisce l'istruzione dalla memoria e viene
incrementato il valore del Program Counter in modo da puntare all'istruzione successiva.
Nella fase di decode l'istruzione viene interpretata: l'interpretazione può avvenire
attraverso circuiti logici già predisposti al momento di costruzione del processore (logica
cablata), oppure attraverso microistruzioni contenute in una apposita parte della ROM
(logica microprogrammata). Nel primo caso, le funzioni eseguibili sono prefissate
fisicamente e il sistema comporta una certa rigidità; nel secondo caso, l'interpretazione
avviene cercando nella ROM la sequenza di passi elementari di cui l'istruzione da
interpretare è a sua volta composta.
Nella fase di execute la Control Unit invia segnali che rappresentano opportuni
comandi per l'esecuzione.
Il ciclo macchina è scandito da un temporizzatore o clock: un oscillatore al quarzo che
emette segnali a intervalli di tempo regolari, all'interno di ciascuno del quale si svolge un
passo elementare di funzionamento.
La frequenza di oscillazione del clock determina la velocità della macchina. Tale velocità
è misurata in megahertz, ovvero milioni di oscillazioni al secondo. Dato che ogni
singola istruzione elementare richiede generalmente più di un ciclo di clock, la velocità
dell'unità centrale può essere misurata anche in MIPS (Millions Instruction Per Second,
milioni di istruzioni al secondo).
Vediamo questi due valori riferiti ad alcuni processori Intel:
8080
8086
8088
80286
80386dx
MHz
2
5
5
8
16
MIPS
0,64
0,33
0,33
1,2
6
Data di rilascio
4/74
6/78
6/78
2/82
10/85
80386sx
80486dx
80486sx
80486dx2
MHz
16
25
20
50
MIPS
2,5
20
16,5
40
6/88
4/89
4/91
3/92
Data di rilascio
ARCHITETTURA RISC-CISC
Esistono due tecnologie per la costruzione di microprocessori: la CISC (Complex
Instruction Set Computer) e la RISC (Reduced Instruction Set Computer).
I processori CISC sono quelli di uso più comune: la loro potenzialità viene incrementata
attraverso l'aumento delle operazioni che riescono ad effettuare, andando a cercare
addirittura dei macrocomandi comuni a molti linguaggi di programmazione. Aumentando
così il numero dei comandi disponibili si ottiene maggiore potenzialità e conseguente
semplicità di programmazione.
Il concetto costruttivo di un microprocessore RISC è invece la forte riduzione del numero
di istruzioni in modo da poter conciliare la velocità del microprocessore con l'esecuzione
di queste. Il fine principale della struttura RISC è quello di produrre processori ad alta
velocità e dal costo ridotto, data la minore complessità del progetto. Lo svantaggio della
tecnologia RISC è il fatto che per i RISC sono stati sviluppati sistemi operativi a minore
diffusione rispetto a quelli sviluppati per i CISC, come Windows.
Inoltre è conseguenza dell'architettura RISC la maggiore complessità
dei programmi: se i processori riconoscono una quantità molto bassa di
istruzioni, il programmatore deve sopperire con il software per far
svolgere ad essi operazioni complesse. In questo caso diventa praticamente
obbligatorio studiare, di ogni porzione di codice, il metodo per renderla più veloce, e
l'ottimizzazione del codice diviene di primaria importanza nello sviluppo dei sistemi di
tipo Risc.
I processori CISC più conosciuti sono la famiglia di CPU della Intel: 80286, 80386,
80486, Pentium. Altri costruttori, come AMD e Cyrix, producono microprocessori
compatibili.
I processori RISC si utilizzano da vari anni nelle cosiddette "stazioni di lavoro"
(workstation), ossia elaboratori con prestazioni e prezzi superiori a quelli dei PC. Ogni
casa produttrice di workstation ha sviluppato un proprio processore RISC. IBM per
esempio utilizza il processore RISC 6000, la MIPS ha realizzato R3000 e R4000, SUN ha
sviluppato lo SPARC, mentre la DIGITAL impiega l'ALPHA.
Intel 1979
Alla fine del 1979 l'Intel presentò il suo nuovo microprocessore a 16 bit l' 8086 il primo
di una famiglia che , insieme a quella sviluppata dalla motorola a partire dal 68000,
avrebbe dominato il mercato dei sistemi operativi a 16 bit , sopratutto dopo
l'introduzione ,a partire dal 1981 del PC IBM basato sull'8088 , immediata derivazione
del 8086 .Il microprocessore 8086 è stato sviluppato dall'Intel come evoluzione dell'8080
di cui lo z-80 è la versione migliorata. Il successo della famiglia è stato poi confermato
dagli sviluppi successivi dei personal computer IBM basati sui microprocessori Intel e
precisamente sugli Intel 80286 80386 e 80486 derivati dall'8086 con un aumento
progressivo delle prestazioni che ha portato per il PC 80486 ad una potenza di calcolo di
decine di MIPS (milioni di istruzioni al secondo).
Le caratteristiche principali dell'8086 sono, per l'hardware , il contenitore a 40 piedini , il
multiplessaggio dei bus dati ,indirizzi e status ,la possibilità di indirizzare 1.048.576
locazioni di memoria , l'esistenza di due diversi modi di funzionamento ,minimo e
massimo e il funzionamento cosiddetto a pipeline per cui mentre una parte della CPU sta
eseguendo una istruzione ,un altra parte carica dalla memoria e inserisce in una coda di
attesa una istruzione successiva.Per ciò che riguarda il software le caratteristiche
principali sono un set di istruzioni e una disponibilità di modi di indirizzamento molto
maggiore rispetto ai microprocessori a 8 bit (Zilog Z-80) e la possibilità di operare
direttamente sui singoli byte , sulle parole a 16 bit (WORD) e sui blocchi.
-8086SET DI ISTRUZIONI
Per quanto riguarda l'inserimento delle istruzioni ci sono vari comandi a
disposizione per ogni tipo di azione che dobbiamo far eseguire al programma:
ISTRUZIONI DI SPOSTAMENTO DEI DATI;
ISTRUZIONI LOGICHE;
ISTRUZIONI ARITMETICHE;
ISTRUZIONI DI MODIFICA DEL FLUSSO(SALTI E ITERAZIONI);
ISTRUZIONI DI IMPUT/OUTPUT;
ISTRUZIONI VARIE;
Al primo gruppo appartengono quei comandi che reperiscono i propri
operandi direttamente nelle locazioni di memoria indicate dalle istruzioni.
ISTRUZIONI DI SPOSTAMENTO DEI DATI
Per spostamento dati si intende il trasferimento di dati da una zona ad un
altra di memoria o la diretta assegnazione di un valore a una locazione di
memoria o a un registrassi può parlare di spostamento di valori da un registro
a una locazione di memoria oppure il contrario, o ancora da un registro ad un
altro registro.
Le istruzioni di questa classe hanno una grande versatilità ma anche una grand
d'uso.Nell'8086 si riesce con una sola istruzione a trasferire i dati tra le differen
processore.
Per questo tipo di processi si utilizza il comando:
MOV <dest>,<sorg>
nella quale MOV sta per move(sposta);
ES.Caricare nel registro B il contenuto del registro A = MOV BH,AH
ISTRUZIONI LOGICHE
Le istruzioni logiche servono per effettuare le normali operazioni OR,AND,NOT,X
OPERAZIO
NE
AND
AND
<op>,<op>
OR
OR
<op>,<op>
OR esclusioni
XOR
<op>,<op>
logico
logico
(XOR)
bit a bit
a1)
8086
Negazione
(comp.
<op>
NOT
ES.OR CL,BL
ES.XOR
AX,BX
ISTRUZIONI ARITMETICHE
Le istruzioni aritmetiche classiche sono quelle di sottrazione,
addizione,moltiplicazione alle quali vanno aggiunte alcune istruzioni
specifiche del contesto come l'incremento e il decremento dell'operando.
OPERAZIONE
Somma di due operandi
Somma di due operandi e riporto
Sottrazione tra due operandi
Sottrazione tra due op. e del riporto
Confronto tra due operandi
8086
ADD<op>,<op>
ADC <op>,<op>
SUB <op>,<op>
SBB <op>,<op>
CMP <op>,<op>
Cambio segno (compl. a due)
NEG <op>
Incremento dell'operando
INC <op>
Decremento dell'operando
DEC <op>
ISTRUZIONI DI MODIFICA DEL FLUSSO
Le istruzioni di modifica del flusso sono tutte quelle istruzioni che modificano
la normale esecuzione sequenziale del programma.
Una modifica del flusso è data dalle istruzioni di salto e da quelle iterative.
Le istruzioni di salto si dividono in due gruppi principali:
salti condizionati;
salti incondizionati;
ISTRUZIONI DI SALTO INCONDIZINATO:
Un'istruzioni di salto incondizionato verso l'indirizzo indicato, sono quelle che
fanno in modo che l'esecuzione continui a partire dall'indirizzo segnalato ogni
volta che essa viene incontrata.Una istruzione di questo tipo viene eseguita
sempre e comunque dalla CPU, indipendendemente dalla posizione che
occupa all'interno dalla seguenza d'istruzioni del programma.
I salti incondizionati si dividono a sua volta in salti assoluti e salti relativi.
SALTI INCONDIZIONATI ASSOLUTI:
Un salto incondizionato assoluto ha la seguente forma:
JUMP <ind>
dove <ind> indica l'indirizzo della locazione di memoria che contiene
l'istruzione a cui saltare.
SALTI INCONDIZIONATI RELATIVI:
Nei salti incondizionati relativi l'indirizzo a cui saltare è ottenuto sommando
lo spiazzamento (<disp>) al contenuto di IP.
Questo tipo di istruzione è rappresentata nel seguente modo:
JUMPR <disp>
Lo spiazzamento non corrisponde al numero di istruzioni da saltare, bensì al
numero di byte da saltare.
ISTRUZIONI DI SALTO CONDIZIONATO:
I salti condizionati vengono eseguiti solamente quando si verifica una
determinata condizione: se quella condizione non si verifica la CPU ignora
l'istruzioni di salto per proseguire il normale svolgimento del programma.
Nell'istruzione si deve indicare sia la condizione per cui dovrà avvenire
l'eventuale salto, sia la destinazione (in modo assoluto relativo) del salto.
Una generica istruzione di salto condizionato ha una sintassi del tipo:
JUMPC <cond>, <dest>
Dove <cond> indica la condizione di salto e <dest> la destinazione (indirizzo
spiazzamento) del salto.
L'8086 non consente il salto assoluto perchè ha un numero di byte troppo
inferiore rispetto allo Z-80.
Nei salti condizionati relativi ( unico tipo di salto permesso nell'8086 ) la
sintassi è del tipo:
J <cond>, <disp>
STRUTTURE DI CONTROLLO CONDIZIONALI E ITERATIVE
Queste istruzioni servono per le strutture di salto più complesse
Funzioni
Istruzioni di controllo
LOOP <disp>
diverso da 0
salta se CX è
LOOPZ <disp>
oppure LOOPE <disp>
salta se CX è diverso
da 0 e il flag Z vale 1
LOOPNZ <disp>oppure
LOOPNE <disp>
salta se CX è diverso
da 0 e il flag Z vale 0
ISTRUZIONI DI INPUT/OUTPUT
Le istruzioni di questo gruppo sono quelle che consentono il trasferimento di
informazioni tra periferiche e microprocessore sia in ingresso(da periferica a
processore) che in uscita(da processore a periferica).
OPERAZIONE
input in <acc> dalla periferica di indirizzo <ind>
input in <acc> dalla periferica con indirizzo nel
registro DX
Output nella periferica <ind> del valore di <acc>
Output in periferica di indirizzo in DX del valore di
<acc>
8086
IN
<acc>,<ind>
<acc>,DX
<ind>,<acc>
DX,<acc>
IN
OUT
OUT
ES. Trasferisci il dato dal registro XX
alla periferica di indirizzo F5:
OUT F5,A
ISTRUZIONI VARIE
Vista la varietà di questa classe ci limitiamo a commentarvi il gruppo di
istruzioni più comuni e di uso frequente.Ci occuperemo in dettaglio delle
istruzioni di scorrimento dei bit e commenteremo le istruzioni di gestione dei
blocchi sequenziali di dati.
ISTRUZIONI DI SCORRIMENTO
Le istruzioni di questo gruppo permettono di far scorrere il byte,indicato
come sorgente, di un bit alla volta verso destra o verso sinistra, secondo
modalità differenti da istruzione a istruzione.
Vi riportiamo nella seguente tabella un riepilogo delle istruzioni più comuni di
questa classe:
Operazione
Rotazione a sinistra
Rotazione a sinistra con riporto
Rotazione a destra
8086
ROL <dest>,<cont>
RCL <dest>,<cont>
ROR <dest>,<cont>
Rotazione a destra con riporto
RCR <dest>,<cont>
Shift a sinistra (aritmetico e logico)
SAL <dest>,<cont>
SHL <dest>,<cont>
Shift a destra (aritmetico)
SAR <dest>,<cont>
Shift a destra (logico)
SHR <dest>,<cont>
Le istruzioni di scorrimento dei bit vanno suddivise in due gruppi:
le istruzioni di rotazione e le istruzioni di shift.
Le prime effettuano uno spostamento dei bit nella direzione indicata,per cui i
bit traboccano da una estremità, ricompaiono circolarmente dall'altra.
Le istruzioni di shift, effettuano modifiche o forzature legate al bit che
trabocca durante lo scorrimento.
GESTIONE DI BLOCCHI SEQUENZIALI DI DATI:
In questo gruppo ritroviamo una serie di istruzioni che permettono di:
Trasferire un blocco di dati da una zona di memoria in un'altra;
Ricercare in un blocco di dati un valore contenuto in un registro sorgente.
Queste istruzioni richiedono l'impostazione preventiva di alcuni registri,per
cui non richiedono degli operandi indicati esplicitamente nell'istruzione.
L'8086 è fornito di istruzioni che ci permettono di trasferire il blocco byte per
byte o parola per parola,basta indicargli il segmento a cui facciamo
riferimento.Le istruzioni seguono la seguente sintassi:
MOVSB
MOVSW
Esse servono per trasferire un byte (MOVSB) e una parola (MOVSW) dalla
locazione di indirizzo SI (spiazzamento) e DS (registro segmento) nella
destinazione il cui indirizzo è composto da DI(spiazzamento) e da ES (registro
di segmento).
Se aggiungiamo al programma l'istruzione:
REP
e impostiamo CX al numero di byte da trasferire avremo un trasferimento
dell'intero blocco.