[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