[Docente H. Muccini] http://www.di.univaq.it/~muccini/ArchLab03
“LabArch 2003”
Laboratorio di
Architetture degli
Elaboratori
Terzo Quadimestre, anno 2003
Lecture 2: Prime Istruzioni
- Concetti Fondamentali
- Concetti Iniziali
- Add e Load
LabArch2003
Concetti fondamentali
Linguaggio macchina
Linguaggio assembly
Linguaggi di alto livello
SEA Group
Il linguaggio basato su valori numerici utilizzato dai
computer per memorizzare ed eseguire programmi
Rappresentazione simbolica del linguaggio macchina
Utilizza simboli invece di numeri per rappresentare
istruzioni, registri e dati.
Linguaggio il più simile possibile a quello naturale
Astrazione dai dettagli della macchina.
2003 Henry Muccini
2/21
1
Linguaggio Macchina Assembly
LabArch2003
SEA Group
[This picture comes from Alberto Montresor Lecture Notes] 2003 Henry Muccini
Linguaggio ad Alto livello
(“C”)
3/21
LabArch2003
SEA Group
int main(int argc, char *argv[])
{
int i;
int sum=0;
for (i=0; i <= 100; i++)
sum = sum + i;
printf(“The sum from 0 .. 100 is %d\n”,
sum);
}
2003 Henry Muccini
4/21
2
LabArch2003
Assemblatore
SEA Group
Uno strumento che traduce programmi
scritti nel linguaggio assembly in
linguaggio macchina.
2003 Henry Muccini
5/21
LabArch2003
Compilatore
SEA Group
Uno strumento che traduce un programma
scritto in un linguaggio ad alto livello in
Assembly o file oggetto
2003 Henry Muccini
6/21
3
Architettura degli
Elaboratori
LabArch2003
SEA Group
MAR
Memoria
Bus
MBR
R1R2 … Rn
MEMORIA
ALU
CPU
2003 Henry Muccini
7/21
LabArch2003
Concetti Iniziali
SEA Group
“Istruzioni” = parole del linguaggio
“Set di istruzioni” = vocabolario
I linguaggi dei calcolatori sono simili…
I linguaggi dei calcolatori seguono delle regole…
Poiche’ le tecnologie Hw sono basate su stessi principi
fondamentali
Linguaggi che rendano semplice implementare
l’hardware, massimizzando prestazioni e
minimizzando costi
2003 Henry Muccini
8/21
4
LabArch2003
Obiettivi
SEA Group
Obiettivo di questo corso e’ presentare un
linguaggio che segue tali indicazioni
Descriveremo varie istruzioni del
linguaggio
Architettura usata: MIPS
2003 Henry Muccini
9/21
LabArch2003
SEA Group
Istruzioni
(Alcune) Categorie di istruzioni in MIPS
Istruzioni aritmetico/logiche
Queste istruzioni effettuano operazioni aritmeticologiche sui registri del processore
Istruzioni “Load and Store”
Queste istruzioni spostano dati fra la memoria e i
registri generali del processore
Istruzioni decisionali
Queste istruzioni effettuano il confronto fra i valori
contenuti nei registri
2003 Henry Muccini
10/21
5
Istruzioni Aritmetiche
LabArch2003
SEA Group
ADD a, b, c # a = b + c
SUB a, b, c # a = b - c
TRE operandi
NOTE:
Ciascuna linea puo’ contenere solo una istruzione;
# viene usato per commenti
ADD a, b, c # Questa istruzione esegue la somma a=b+c
Tutte le istruzioni aritmetiche hanno esattamente tre
operandi (numero fisso) per mantenere l’Hw semplice
⇓
PRINCIPIO DI PROGETTO 1:
semplicita’ e regolarita’ sono strettamente correlate
2003 Henry Muccini
11/21
LabArch2003
SEA Group
Esercizio
Scrivere la seguente istruzione in assembler MIPS:
a = (b+c) – (d-f) + g
add x, b, c
sub y, d, f
sub x, x, y
add a, x, g
Considerazioni…
2003 Henry Muccini
12/21
6
LabArch2003
SEA Group
Registri
Data una istruzione aritmetica:
Operandi = Registri
Variabili ≠ Registro:
Variabili in un LP sono infinite
I registri nell’Hw sono finiti
PRINCIPIO DI PROGETTO 2:
Minori sono le dimensioni, maggiore e’ la velocita’
2003 Henry Muccini
Architettura del processore
MIPS di
Stanford
13/21
LabArch2003
SEA Group
2003 Henry Muccini
14/21
7
LabArch2003
(parte della)
del MIPS
Architettura
SEA Group
32 Registri,
ognuno a 32 bit
MAR
Memoria
R1
R32
MBR
R1R2 … R32
MEMORIA
32 bit
ALU
Bus
CPU
32 registri
2003 Henry Muccini
15/21
LabArch2003
SEA Group
Uso
dei
Registri
Registri $s e $t
Compilatore:
Parola (word)
Domanda:
Associa registri e variabili
32 bit
Abbiamo solo 32 registri… come facciamo a gestire
strutture dati complesse (es. vettori)???
Rivedi slide precedente
2003 Henry Muccini
16/21
8
Istruzioni di Trasferimento
LabArch2003
LW $s1, 10($s2)
SEA Group
# carica in $s1 il decimo valore del vettore
LW = Load word
SW $s1, 100($s2)
SW = Store word
NOTE e delucidazioni:
Memoria vista come un VETTORE
Le istruzioni aritmetiche richiedono che gli operandi
siano memorizzati nei registri
Istruzioni
di “Trasferimento”
Indirizzo di base + offset
Memoria indirizzata a singolo byte
2003 Henry Muccini
17/21
LabArch2003
Attenzione
SEA Group
La memoria e’ indirizzata al singolo byte
mentre
I registri sono indirizzati a 32 bit
Word 6
MEM
byte 24
⇓
Vogliamo caricare la 6^ parola
del vettore
LW $s1, 6($s2)
LW $s1, 24($s2)
…
8
7
6
5
byte 4
byte 3
byte 2
byte 1
byte 0
Word 2
Word 1
2003 Henry Muccini
18/21
9
LabArch2003
Esempio
SEA Group
Scrivere in assembly la seguente
assegnazione
A[14] = b + A[6] con b $s1, off(A) $s0
lw $t0, 24($s0)
add $t0, $s1, $t0
sw $t0, 56($s0)
2003 Henry Muccini
19/21
LabArch2003
Vettori con indici variabili
Consideriamo
SEA Group
$s3
$s1
a = b + A[i]
Informalmente:
Formalmente:
$s4
$s2
4*i($s1)
add $t1, $s4, $s4
add $t1, $t1, $t1
add $t1, $t1, $s3
lw $t0, 0($t1)
add $s1, $s2, $t0
2003 Henry Muccini
20/21
10
LabArch2003
SEA Group
Esercizio
Scrivere in assembly la seguente istruzione:
Scrivere in pseudo-C il seguente codice Assembly:
A[4] = b + A[i]
Offset A $s1
b $s2
i $s3
A[3] = A[4] + A[i] con offset A
$s1, i $s2
add $t1, $s2, $s2
add $t1, $t1, $t1
add $t1, $t1, $s1
lw $t0, 0($t1)
lw $t1, 16($s1)
add $t1, $t1, $t0
sw $t1, 12($s1)
2003 Henry Muccini
21/21
11