Architettura di un calcolatore: introduzione

Corso di Calcolatori Elettronici I
A.A. 2011-2012
Architettura di un calcolatore:
introduzione
Lezione 18
Prof. Antonio Pescapè
Università degli Studi di Napoli Federico II
Facoltà di Ingegneria
Corso di Laurea in Ingegneria Informatica
Calcolatore: sottosistemi
•  Processore o CPU (Central Processing Unit)
•  Memoria centrale
•  Sottosistema di input/output (I/O)
CPU
I/O
Memoria
Calcolatore: organizzazione a bus
da: G. Bucci. Calcolatori Elettronici – Architettura e organizzazione. © McGraw-Hill, 2009
Il processore o CPU
Unità di
controllo
Unità
AritmeticoLogica
(ALU)
Registri
Processore o CPU
CPU: struttura interna
Il funzionamento della CPU è scandito dal clock.
da: G. Bucci. Calcolatori Elettronici – Architettura e organizzazione. © McGraw-Hill, 2009
CPU: struttura interna (2)
n  Componenti
q 
Unità di controllo
n 
n 
n 
q 
q 
registro Program Counter (PC) o Prossima Istruzione
Instruction Register o registro di decodifica (IR o D)
registri di Macchina
Unità aritmetico-logica (ALU)
Sezione di Collegamento con la memoria
n 
n 
q 
fondamentali del processore:
registro degli indirizzi di memoria o Memory Address Register MAR
registro di transito dei dati dalla memoria DTR o Memory Buffer MB
Sezione di Collegamento con Ingresso-Uscita
n  Il
linguaggio macchina di un processore è costituito dalla codifica
in binario delle istruzioni eseguibili dal processore
6
Registri della CPU
Ø Registri
interni
»  Necessari al funzionamento del processore
»  Non direttamente visibili al programmatore
»  non appartengono al modello di programmazione
»  Es. MAR, MDR/DTR, IR, …
Ø Registri
di macchina
»  Visibili al programmatore
»  appartengono al modello di programmazione
§  Registri generali (R0, R1, Rn-1)
§  Registri speciali (PC, SR, …)
Unità Aritmetico-Logica (ALU)
•  L Unità di controllo fornisce alla ALU gli operandi, insieme
ad un comando che indica l operazione da effettuare
•  Gli operandi sono copiati nei registri di ingresso della ALU
(O1, O2)
•  La ALU esegue l operazione e pone il risultato nel registro
risultato (U); inoltre, altera il valore dei flag del registro di
stato (SR) in funzione del risultato
O1
+
-
*
/
U
O2
Modello architetturale di un
processore
MEMORIA
Modello a registri generali
CPU
MAR
DTR
Collegamento
memoria
IR o D
Collegamento
I/O
Unità di
Controllo
R0
R1
RI
PC
...
RU
SR
Rn-1
O1
O2
ALU
U
CPU: struttura interna ad 1 bus
da: G. Bucci. Calcolatori Elettronici – Architettura e organizzazione. © McGraw-Hill, 2009
La memoria centrale
Ø 
Ø 
Ø 
La memoria centrale di un computer è organizzata come un array di
stringhe di bit di lunghezza m, dette locazioni
Gli m bit di una locazione sono accessibili dal processore
(in lettura/scrittura) mediante un unica operazione
Ogni locazione è individuata da un indirizzo, cioè un intero compreso tra
0 e N-1, con N = 2k
»  [0, N-1] = SPAZIO DI INDIRIZZAMENTO
Ø 
La memoria centrale è ad accesso casuale (RAM) cioè il tempo di
accesso non dipende dalla posizione del dato
bit 7
msb
bit 0
lsb
0
1
2
..
..
N-2
N-1
m=8
Processori a carattere
e processori a parola
•  I processori a carattere accedono alla
memoria con parallelismo 1 byte (8 bit)
–  prime CPU ad accumulatore
•  I processori a parola hanno la capacità di
indirizzare ed accedere la memoria per unità
(parole o word) di 16 bit, 32 bit o 64 bit
•  In questi sistemi (tranne pochissime eccezioni
nel passato) l unità indirizzabile di memoria
(locazione) è ancora il byte
–  Si parla di sistemi a memoria byte-addressable: ogni
byte ha il suo indirizzo
•  Terminologia Motorola 68000:
word = 2 byte, longword = 4 byte
Big-endian e little-endian
•  I processori a parola possono
disporre in memoria i byte che
formano una parola in due modi
Disposizione BIG_ENDIAN
Byte3
Byte2
Byte1
Byte0
MSB
–  Big-endian:
LSB
i byte sono disposti in memoria in
modo che il più significativo MSB
Indirizzi crescenti
occupi la locazione di memoria di
indirizzo minore, e poi via via gli altri, Disposizione LITTLE ENDIAN
fino a quello meno significativo LSB
Byte0
LSB
che è collocato nella locazione di
Byte1
indirizzo maggiore
Byte2
Byte3
–  Little-endian: disposizione opposta
MSB
•  Il processore Motorola 68000 usa
la convenzione Big Endian
Indirizzi crescenti
Big-endian e little-endian:
un esempio
•  Immaginiamo di avere un processore a parola, con
parole di 32 bit (4 byte) e voler scrivere in memoria il
valore intero (esadecimale) $12FA34ED all indrizzo 812
•  Le figure sottostanti illustrano il contenuto della memoria
nei due casi big-endian e little-endian
…
12
FA
34 ED
…
indirizzo
…
indirizzo
big-endian
ED 34
FA
12
…
little-endian
Memoria: parole allineate e non
Per un processore a parola di 16 bit, una parola che inizia ad
un indirizzo pari si dice allineata sul limite di parola
Ø  Tipicamente, un tale processore è in grado di accedere ai due
byte che costituiscono una parola allineata mediante una sola
operazione di lettura
Ø  Il processore 8086 consente l’utilizzo di parole non allineate,
cioè parole che iniziano ad un indirizzo dispari, in tal caso sono
necessari 2 distinti accessi in memoria (uno per X+1 e uno per X+2)
Ø  Il processore 68000 NON consente l accesso a parole non
allineate
Ø 
Parola X
X
X+1
Parola X+2
X+2
X+3
(X pari)
X+1
La parola (X+1) non è allineata sul limite di parola
X+2
Interazione processore-memoria
read
Memoria
Address bus
k bit
MA
write
Data bus
p bit
MB
CPU
Unità di
controllo del
processore
Processore a registri generali
Il processore dispone di un set di registri R0, R1, ...., RN-1
utilizzabili indifferentemente dal programmatore
Ø  Le istruzioni che operano su registri sono più veloci di quelle
che operano su locazioni di memoria
Ø  Il programmatore può utilizzare i registri del processore per
memorizzare i dati di uso più frequente
Ø  concetto di gerarchia di memorie
Ø  Istruzioni con operandi registri:
[R0] + [R1] → R1
Ø  Istruzioni con operandi memoria-registri:
[R0] + M[1000] → R0
memory-to-register
M[1000] + [R1] → M[1000]
register-to-memory
Ø 
Algoritmo del Processore
•  Prelievo dell istruzione (Fetch)
–  La CPU preleva dalla memoria l istruzione il cui indirizzo è in PC
–  L istruzione viene copiata nel registro IR
•  Decodifica / prelievo degli operandi (Operand Assembly)
–  L unità di controllo esamina il contenuto di IR e ricava il tipo di
operazione ed i relativi operandi
–  Eventuali operandi contenuti in memoria vengono prelevati
•  Esecuzione dell istruzione (Execute)
–  L unità di controllo richiede all ALU di effettuare l operazione
specificata nell istruzione ed invia il risultato ad un registro o alla
memoria
Algoritmo del processore
n 
L unità di controllo opera in un ciclo infinito:
1.  Prelievo
2.  Preparazione degli operandi
3.  Esecuzione
Nella fase di bootstrap il ciclo viene
inizializzato; viene assegnato un
valore iniziale opportuno a PC in
modo da avviare l esecuzione di un
programma iniziale in ROM
Bootstrap
Instruction fetch
Operand assembly
Execute
Fase fetch
•  IR=M[PC]; PC=PC+k
PC 00 0000 1000
MAR
00 0000 1000
0100 0000 0001 0000
DTR 0100 0000 0001 0000
00 0000 1000
Memoria centrale
IR
0100 0000 0001 0000
Codice operativo
Fase fetch: sottopassi
da: G. Bucci. Calcolatori Elettronici – Architettura e organizzazione. © McGraw-Hill, 2009
Esecuzione sequenziale delle istruzioni
•  Alla fine della fase fetch:
i
•  PC=PC+k
i+1
•  k = lunghezza istruzioni in byte
i+2
•  serve a far sì che PC
punti all istruzione
Area codice
posta subito dopo
•  Esecuzione delle
istruzioni in sequenza
Area dati
così come sono memorizzate
•  Per cicli e figure di controllo
(if-then, if-then-else, switch)
occorrono istruzioni di salto
ISTR1
ISTR2
ISTR3
A
B
C
Codifica delle istruzioni
ESEMPIO: una CPU con istruzioni a lunghezza fissa di 32 bit
LD R1, Var
; R1 ß M[Var]
ADD R1, R2, R3
; R1 ß R2 + R3
da: G. Bucci. Calcolatori Elettronici – Architettura e organizzazione. © McGraw-Hill, 2009
Sequenze di istruzioni in memoria
Lo statement a = b + c si traduce come:
LD R2, B
;B indirizzo a cui è allocata la parola b
LD R3, C
;C indirizzo a cui è allocata la parola c
ADD R1, R2, R3
ST A, R1
;A indirizzo a cui è allocata la parola a
da: G. Bucci. Calcolatori Elettronici – Architettura e organizzazione. © McGraw-Hill, 2009
Architettura del processore
MC68000
32
PC
32
EAR
Interfaccia
memoria
ed I/O
Bus di
16
16 x
Registri 32
IR
generali
D0-D7,
A0-A7
Control
unit
TEMP
32
8
ALU
memoria
e di I/O
SR 8
CCR
Architettura del processore
Organizzazione
Motorola 68000
MC68000
Holds address
of the next instruction
to be executed
Program Counter (PC)
32
If necessary
Holds the address
of memory reads/writes
Effective Address Register (EAR) 32
Internal Bus
Instruction
Register(IR)
16
Instruction
Decode
and Control
General Registers
D0..D7
A0..A6
A7= User Stack pointer (USP)
A7’=Supervisor Stack Pointer(SSP)
32
Memory
and I/O
Interface
Control
Pipeline
Temporary Register
External
Bus
Holds first word
of currently
executing instruction
32
Holds operands or
intermediate results
Performs all logical
or arithmetic
operations
( ADD, SHIFT, etc. )
Arithmetic and Logic Unit
(ALU)
32
8
CCR
SR
Holds result of ALU
Operations
Caratteristiche del processore
MC68000
•  Dati:
–  All esterno:
parola di 16 bit (16 pin per i dati)
–  All interno:
registri di 32 bit
•  Indirizzi:
–  All esterno:
24 bit (spazio di indirizzamento fisico 224 = 16M)
•  512 pagine (29) da 32K (215)
–  All interno:
32 bit
Caratteristiche del processore
MC68000
•  Parallelismo della memoria:
–  Parole di 16 bit, ognuna costituita da due byte con
indirizzi distinti (memoria byte addressable)
•  Convenzioni della memoria:
–  Una parola deve essere allineata ad un indirizzo pari
(even boundary)
–  Convenzione big-endian
Modello di programmazione
del MC68000
31
16 15
8 7
0
D0
D1
D2
D3
D4
D5
D6
D7
T
S
I2 I1 I0
A0
A1
A2
A3
A4
A5
A6
A7
PC
X N Z V C SR
Status register
Status Register
! Contiene:
! La interrupt mask (8 livelli)
! I codici di condizione (CC) - oVerflow (V), Zero (Z), Negative (N),
Carry (C), e eXtend (X)
! Altri bit di stato - Trace (T), Supervisor (S)
! I Bits 5, 6, 7, 11, 12, e 14 non sono definiti e sono riservati per
espansioni future
Formato delle istruzioni assembly
•  
Le istruzioni assembly sono tipicamente costituite da un codice
mnemonico seguito da uno o più operandi.
•   Ad esempio, le istruzioni a due operandi per il trasferimento e le
operazioni aritmetiche sui dati sono tipicamente nella forma:
Operazione Sorgente,Destinazione
•  
Per esempio, per effettuare la somma tra due numeri si potrà scrivere:
ADD A,B
•  
Questo comando realizza la somma di A e B e porrà il risultato
dell’operazione in B sovrascrivendone il contenuto corrente.
Formato Istruzioni del 68000
•  
La prima word di una istruzione è chiamata Opcode word
–   Tutte le informazioni necessarie per decodificare un’istruzione
sono nell’ Opcode Word
–   Contiene un opcode (cosa fa)
–   Contiene zero,uno o due effective address fields (EA)
•  
L’istruzione completa in memoria può contenere l’ opcode word ed
altre word di istruzioni addizionali
–   Un’istruzione può richiedere fino a 5 word di memoria
•  
La forma generale della istruzione assembly è la seguente:
Label
OP CODE sorgente, destinazione
*Comment
Formato e Codifica istruzioni MC68000
Si analizza qui solo
la struttura della
prima word (16 bit)
del codice di una
istruzione, detta
OPCODE WORD
Esempio: l’istruzione MOVE
•   Volendo realizzare una copia del contenuto di un registro in un altro, ad
esempio, il linguaggio assembly potrebbe richiedere di scrivere:
MOVE R0,SOMMA
•  
Il codice mnenonico, in questo caso MOVE, rappresenta l’azione svolta
dall’istruzione.
•  
L’assemblatore traduce questo codice mnemonico in un codice binario
di forma comprensibile al calcolatore, di solito chiamato codice operativo
(OP-CODE).
•  
Segue almeno uno spazio bianco dopo il quale sono riportate le
informazioni che specificano gli operandi.
MOVE (MOVE)
•   L’istruzione più comunemente usata per il movimento dati è
MOVE
•   Muove - Copia da una sorgente a una destinazione
MOVE [sorgente], [Destinazione]
•   Esempio
MOVE.W D2, $1300
•   copia il contenuto del registro D2 nell'area di memoria di
indirizzo esadecimale 1300
L’istruzione MOVE
•  
Istruzioni di movimento dati tipiche del 68000 sono:
MOVE Di, Dj
MOVE M, Di
MOVE Di, M
MOVEA - utilizza semre registri indirizzi come destinazione e non
impatta lo Status Register
MOVEQ - (quick move) utilizzata per il movimento di valori piccoli (fino a
8 bits, i.e. -127 to +127) nei registri dati (e.g. MOVEQ.B #3,D3)
Operazioni Aritmetiche
Operazioni aritmetiche
operazione sorgente, destinatario
che tipicamente funziona come segue:
destinatario ? sorgente → destinatario
dove ? È una delle operazioni aritmetiche (+,-,* or /)
e.g.
ADD
D0,D1
D1 + D0 → D1
SUB
D0,D1
D1 - D0 → D1
MUL
D0,D1
D1 * D0 → D1
DIV
D0,D1
D1 / D0 → D1
ADD (ADD)
•   Aggiungi - Aggiunge un valore a una destinazione
ADD [valore], [Destinazione]
•   Esempio
ADD D1, SOMMA
•   aggiunge il contenuto del registro D1 nella variabile di
memoria SOMMA
Gli operandi
•   Nel nostro esempio, l’operando sorgente è nel registro D1.
•   Questa informazione è seguita dall’indicazione
dell’operando destinazione, separato da quello sorgente
attraverso una virgola.
•   L’operando destinazione è nella locazione di memoria il cui
indirizzo è rappresentato dal nome simbolico SOMMA.
•   Per creare questa associazione, ogni nome deve essere
opportunamente definito nell’ambito del listato creando così
un’associazione SIMBOLO -> INDIRIZZO.
Natura degli operandi
•   Gli operandi forniti come argomento di un’istruzione
possono contenere informazioni di tipo differente.
•   Può accadere che l’operando contenga direttamente il
valore utile per il calcolo. In questo caso si parla di operando
immediato ed esso è direttamente codificato di seguito
all’istruzione.
•   In altri casi l’operando contiene il riferimento ad un registro
del processore il quale può contenere, a sua volta, il dato o
(ancora) l’indirizzo di un registro della memoria in cui è
contenuto il dato.
Natura degli operandi: esempio.
•  
Nell istruzione
ADD #9,D0
il primo operando è di tipo immediato. Il suo valore viene codificato in
memoria direttamente assieme all’istruzione. Il secondo operando è un
registro interno del processore.
•  
Nell istruzione
ADD D0,D1
entrambi gli operandi sono riferimenti a registri interni.
•  
L’istruzione
ADD D0,#9
è priva di senso dal momento che l’operando destinazione non specifica una
locazione di memoria in cui porre il risultato dell’operazione.
Esempio: la somma di due registri in un terzo
•  
Supponiamo di voler realizzare l’istruzione C++
C = A + B;
•  
Questa istruzione ha lo scopo di sommare il contenuto delle locazioni di
memoria individuate dagli identificatori A e B e, successivamente, di
porre il risultato della somma nella locazione di memoria individuata
dall’identificatore C.
•  
Se il linguaggio assembly rende disponibile esclusivamente
un’istruzione per la somma a due operandi (come in genere accade),
non è possibile realizzare l’elaborazione in un unico passo, ma
bisognerà scrivere:
MOVE B,C
ADD A,C
Registri interni e memoria (1)
•   Un’istruzione, in generale, può coinvolgere sia i registri
interni che i registri della memoria.
•   L’accesso ai registri interni è molto più veloce
dell’accesso ai registri della memoria, poiché i primi
sono già all’interno del processore e non sorge dunque
la necessità di trasferimenti attraverso canali esterni.
•   Inoltre, i registri interni sono in numero molto minore
delle celle di memoria (tipicamente da 8 a 64) e quindi
per essere indirizzati c’è bisogno di pochi bit.
Registri interni e memoria (2)
•   Ad esempio, un processore che abbia 32 registri interni,
può indirizzarli utilizzando 5 bit.
•   Poiché l’uso di registri interni permette elaborazioni più
rapide e produce istruzioni più corte, essi sono usati per
memorizzare dati temporanei nella CPU durante
l’elaborazione.
•   In alcuni casi, determinati comandi assembler possono
operare esclusivamente su registri interni; operazioni su
registri di memoria non sono ammesse e, su necessità,
bisogna esplicitamente provvedere al trasferimento dei
dati tra la memoria e i registri interni.
Esempio: codifica di un’istruzione (1)
•   A titolo esemplificativo prendiamo in considerazione l’istruzione
ADD #9,D3
•  
che che ha come effetto la somma di 910 al contenuto del registro D3 e
la memorizzazione del risultato di nuovo in D3.
•  
Nel caso del M68000:
– il comando ADD da sorgente a registro dati si codifica con 1101---0-----– L’indice del registro si codifica con ----011--------– La modalità operando immediato si codifica con ----------111100
– La dimensione dell’operando (di default word) si codifica con: --------01------
•  
La stringa completa dà: 1101 011 0 01 1111002 = D67C16
Esempio: codifica di un istruzione (2)
•  
L assembler 68000 permette di specificare il tipo di dato a cui
si sta facendo riferimento, aggiungendo un suffisso allo
mnemonico del istruzione:
.B per dati di tipo byte
.W per dati di tipo word
.L per dati di tipo long.
•  
Esempio:
MOVE.W DO, D1
Esempio di file list
PLC
00000000
00000000
00008000
00008000
00008006
0000800C
00008012
00008018
0000801E
00008024
00008028
0000802A
00008030
00008030
00008032
00008034
00008034
label
contenuto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
4279 00008032
3039 00008034
33C0 00008030
D079 00008032
33C0 00008032
3039 00008030
0640 FFFF
66E2
4EF9 00008008
=00008008
=00000011
0011
opcode operands
comments
* Somma i primi 17 interi
*
ORG
$8000
START
CLR.W
SUM
MOVE.W
ICNT,D0
ALOOP
MOVE.W
D0,CNT
ADD.W
SUM,D0
MOVE.W
D0,SUM
MOVE.W
CNT,D0
ADD.W
#-1,D0
BNE
ALOOP
JMP
SYSA
SYSA
EQU
$8008
CNT
DS.W
1
SUM
DS.W
1
IVAL
EQU
17
ICNT
DC.W
IVAL
Symbol Table
ALOOP
START
800C
8000
CNT
SUM
8030
8032
IVAL
ICNT
0011
8034
Programma caricato in memoria
Codifica istruzioni MC68000