Introduzione. Indice. Linguaggio macchina. Linguaggio assembler



Documenti analoghi
Architettura dei calcolatori e sistemi operativi. Assemblatore e Collegatore (Linker) Capitolo 2 P&H Appendice 2 P&H

La macchina programmata Instruction Set Architecture (1)

Architettura del Set di Istruzioni (ISA)

MIPS Instruction Set 2

Calcolatori Elettronici

Sommario Introduzione al linguaggio Assembly. Calcolatori Elettronici Prof. Gian Luca Marcialis. Le operazioni fondamentali

Il set istruzioni di MIPS Modalità di indirizzamento. Proff. A. Borghese, F. Pedersini

Il set istruzioni di MIPS Modalità di indirizzamento. Proff. A. Borghese, F. Pedersini

ToolChain: Come Generare Applicazioni in Linguaggio Macchina

Linguaggio Assembly e linguaggio macchina

Architettura degli Elaboratori

Architettura (10/9/2003) Pag. 1/6. Cognome e Nome (in stampatello):

Architettura di tipo registro-registro (load/store)

Architettura hardware

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Assembler di Spim. Assembler di SPIM. Struttura di un programma assembler. Direttive

Il simulatore SPIM SPIM

Linguaggio assembler e linguaggio macchina (caso di studio: processore MIPS)

Linguaggio Assembly e linguaggio macchina

Sistema operativo: Gestione della memoria

Architettura del calcolatore

Linguaggio Assembly e linguaggio macchina

CPU. Maurizio Palesi

ISA (Instruction Set Architecture) della CPU MIPS

Le costanti Le modalità di indirizzamento L assembly del MIPS

Informazione analogica e digitale

CLASSE III A I.T.I. (ABACUS) SISTEMI DI ELABORAZIONE E TRASMISSIONE DEI DATI VERIFICA DI RECUPERO

Il Processore: i registri

Linguaggio C. Fondamenti. Struttura di un programma.

L unità di controllo. Il processore: unità di controllo. Le macchine a stati finiti. Struttura della macchina a stati finiti

AXO Achitettura dei Calcolatori e Sistema Operativo. Instruction Set Architecture (ISA) e 68000

Architettura MIPS (RISC) Architetture dei Calcolatori (Lettere. Principi di Progettazione ISA MIPS MIPS R3000 ISA. Il Set di Istruzioni MIPS

Architettura degli elaboratori (A)

Capitolo Quarto...2 Le direttive di assemblaggio di ASM Premessa Program Location Counter e direttiva ORG

Lezione 1: L architettura LC-3 Laboratorio di Elementi di Architettura e Sistemi Operativi 10 Marzo 2014

Linguaggio Assembler MIPS

Il processore. Il processore. Il processore. Il processore. Architettura dell elaboratore

Calcolatori Elettronici A a.a. 2008/2009

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

Calcolatori Elettronici Parte X: l'assemblatore as88

AXO Architettura dei Calcolatori e Sistema Operativo. processo di assemblaggio

Calcolatori Elettronici

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

Quinto Homework. Indicare il tempo necessario all'esecuzione del programma in caso di avvio e ritiro fuori ordine.

CALCOLATORI ELETTRONICI

Calcolatori Elettronici A a.a. 2008/2009

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

ARCHITETTURA DELLE CPU come ARCHITETTURA DEL SET DI ISTRUZIONI

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

PROVA INTRACORSO TRACCIA A Pagina 1 di 6

L Assembler Istruzioni Aritmetiche. M. Rebaudengo - M. Sonza Reorda. Politecnico di Torino Dip. di Automatica e Informatica

Il linguaggio del calcolatore: linguaggio macchina e linguaggio assembly

Laboratorio di Architettura degli Elaboratori LabArch 2006 Secondo Quadimestre, a.a Docente: H. Muccini

Sistemi Operativi GESTIONE DELLA MEMORIA CENTRALE. D. Talia - UNICAL. Sistemi Operativi 6.1

Aritmetica dei Calcolatori 2

4 3 4 = 4 x x x 10 0 aaa

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter

Lezione 20. Assembly MIPS: Il set istruzioni, strutture di controllo in Assembly

Linguaggi e Paradigmi di Programmazione

Il memory manager. Gestione della memoria centrale

Il microprocessore 8086

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.7. Il moltiplicatore binario e il ciclo di base di una CPU

La Macchina Virtuale

Fasi di creazione di un programma

Introduzione alla programmazione in C

Linguaggio macchina. Architettura degli Elaboratori e delle Reti. Il linguaggio macchina. Lezione 16. Proff. A. Borghese, F.

Architettura di un calcolatore: introduzione

Richiami di informatica e programmazione

Lezione 20. Assembly MIPS: Il set istruzioni, strutture di controllo in Assembly

LINGUAGGI DI PROGRAMMAZIONE

C. P. U. MEMORIA CENTRALE

Riassunto. Riassunto. Ciclo fetch&execute. Concetto di programma memorizzato. Istruzioni aritmetiche add, sub, mult, div

Transcript:

Indice Linguaggio ad alto livello, linguagio assembler e linguaggio macchina Il linguaggio assembler MIPS: istruzioni aritmetiche, di trasferimento dati e di salto Conversione linguaggio assembler in linguaggio macchina Gestione delle procedure. Uso della pila Modi di indirizzamento Sintassi di un programma in assembler MIPS SPIM Confronto con altre architetture: PowerPC e Intel 80x86 Introduzione le CPU lavorano con linguaggio macchina sequenza di cifre binarie Il linguaggio assembler e la rappresentazione simbolica (mnemonica) della codifica binaria usata dal calcolatore (linguaggio macchina) simboli al posto di bits codici delle istruzioni (opcodes) registri uso di etichette macro La codifica binaria delle istruzioni si trova in memoria 6 7 Linguaggio macchina Si intende l insieme delle operazioni direttamente eseguibili dall hardware Ogni operazione e richiesta da un istruzione Un insieme di istruzioni costituisce un programma Ogni istruzione deve specificare che tipo di operazione e richiesta e quali sono i suoi operandi Linguaggio assembler Piu primitivo dei linguaggi di alto livello e.g., manca un controllo di flusso sofisticato Molto restrittivo e.g., Instruzioni Aritmetiche del MIPS Noi lavoreremo con l architettura del set di instruzioni MIPS simile ad altre architetture sviluppate a partire dagli anni 80 usata da NEC, Nintendo, Silicon Graphics, Sony Obiettivi di Progetto: massimizzare la performance e minimizzare il costo, ridurre il tempo di progettazione 8 9

Linguaggio alto livello, assembler, macchina Vantaggi e svantaggi del linguaggio assembler Programma che calcola e stampa la somma dei quadrati dei primi 100 interi #include <stdio.h> int main () { int i; int sum = 0; for (i = 0; i <= 100; i = i + 1) sum = sum + i * i; printf ("The sum from 0.. 100 is %d\n", sum); }.text.align 2.globl main main: subu $sp, $sp, 32 sw $ra, 20($sp) sd $a0, 32($sp) sw $0, 24($sp) sw $0, 28($sp) loop: lw $t6, 28($sp) mul $t7, $t6, $t6 lw $t8, 24($sp) addu $t9, $t8, $t7 sw $t9, 24($sp) addu $t0, $t6, 1 sw $t0, 28($sp) ble$t0, 100, loop la $a0, str lw $a1, 24($sp) jal printf move$v0, $0 lw $ra, 20($sp) ddu $sp, $sp, 32 jr $ra.data.align 0 str:.asciiz "The sum from 0.. 100 is %d\n" 00100111101111011111111111100000 10101111101111110000000000010100 10101111101001000000000000100000 10101111101001010000000000100100 10101111101000000000000000011000 10101111101000000000000000011100 10001111101011100000000000011100 10001111101110000000000000011000 00000001110011100000000000011001 00100101110010000000000000000001 00101001000000010000000001100101 10101111101010000000000000011100 00000000000000000111100000010010 00000011000011111100100000100001 00010100001000001111111111110111 10101111101110010000000000011000 00111100000001000001000000000000 10001111101001010000000000011000 00001100000100000000000011101100 00100100100001000000010000110000 10001111101111110000000000010100 00100111101111010000000000100000 00000011111000000000000000001000 00000000000000000001000000100001 10 Vantaggi velocita d esecuzione (es.: calcolatori embedded) occupazione di memoria collegabile a programmi ad alto livello possibilita di usare istruzioni specializzate Svantaggi minore portabilita fattore di espansione elevato => minore produttivita minore leggibilita no programmazione strutturata Nota: la performance deve essere valutata sulle istruzioni reali 11 Gerarchia di trasformazione Programma in C Compilatore Programma in linguaggio assembler Assemblatore Modulo oggetto: Linguaggio macchina Modulo oggetto: Librerie Linker Eseguibile Loader Memoria 12 Gerarchia di trasformazione Un programma scritto in linguaggio ad alto livello viene: compilato in linguaggio assembler assemblato per ottenere un modulo oggetto in linguaggio macchina il linker combina uno o piu moduli oggetto con le procedure contenute nelle librerie per esplicitare tutti i riferimenti incrociati il loader colloca il codice macchina in opportune locazioni di memoria in modo che possa essere eseguito dal processore. 13

Gli assemblatori Il formato del file oggetto Il processo di traduzione e costituito da due parti: traduzione in indirizzi delle locazioni di memoria etichettate traduzione istruzioni assembler (codice operativo, identificatori di registri, etichette) in istruzione macchina File oggetto etichetta esterna (o globale) etichetta locale (funzione static in C) Riferimenti in avanti => tabella dei simboli. E composto da 6 parti Intestazione del file oggetto, Segmento di testo, Segmento di dato, Informazioni di rilocazione, Tabella dei simboli, Informazioni per il debugger Funzionalita aggiuntive direttive per la codifica dei dati macro 14 15 Linker - Loader - Uso della memoria Compilazione separata => diversi moduli Il linker unisce i files: cerca le procedure usate nelle librerie riloca i file oggetto risolve i riferimenti tra files Il loader (in unix): lettura dell intestazione del file eseguibile per determinare la sua dimensione creazione di uno spazio di indirizzamento sufficiente copia delle istruzioni e dei dati dal file eseguibile alla memoria copia nello stack degli eventuali parametri passati al programma principale inizializzazione dei registri dell elaboratore (es. stack pointer, ) salto ad una procedura di inizializzazione (start-up routine) che chiama la procedura principale del programma (main) 16 Aritmetica MIPS Tutte le instruzioni hanno 3 operandi Una linea puo contenere una sola istruzione L ordine degli operandi e fissato ( destinatione per prima) Forma: operatore operando1, operando2, operando3 Significato: operando1 = operando2 operatore operando3 Esempio: codice MIPS : add $s0, $s1, $s2 codice C : a = b + c 17

Aritmetica MIPS Principio di progetto1: semplificare per favorire la regolarita Svantaggi della regolarita C code: a = b + c + d; e = f - a; MIPS code: add $t0, $s1, $s2 add $s0, $t0, $s3 sub $s4, $s5, $s0 Gli operandi devono essere registri solo 32 registri da 4Bytes (= 1 Word) Principio di progetto2: dimensioni minori => maggiore velocita Convenzioni sull uso dei registri Registro: locazione di memoria elementare all interno del processore Nome Numero Uso $zero 0 il valore costante 0 $v0-$v1 2-3 valori per risultati di espressioni $a0-$a3 4-7 argomenti $t0-$t7 8-15 temporanei $s0-$s7 16-23 salvati $t8-$t9 24-25 altri temporanei $gp 28 global pointer $sp 29 stack pointer $fp 30 frame pointer $ra 31 return address $at 1 riservato $k0 26 riservato $k1 27 riservato 18 19 Moltiplicazione e divisione Coppia di registri 32 bit (Hi,Lo) che contengono il prodotto di una moltiplicazione ed il resto ed il quoziente, rispettivamente, di una divisione. Istruzioni mflo,mfhi per accedere ai registri Hi e Lo Esempio: mult $s2,$s3 mflo $s1 #$s1 = Lo (copia di Lo in $s1) Compito del programmatore evitare l overflow e controllare che non ci siano divisioni improprie (per zero). Istruzione Esempio Significato Commenti move from Hi mfhi $1 $1 = Hi Copia Hi in $1 move from Lo mflo $1 $1 = Lo Copia Lo in $1 move to Hi mthi $1 Hi = $1 Copia $1 in Hi move to Lo mtlo $1 Lo = $1 Copia $1 in Lo 20 Overflow Il risultato dell operazione non e rappresentabile dall hw disponinibile I numeri rappresentabili sono da 0 a (2 32-1) (unsigned) da -2 31 a (2 31-1) (signed) Condizioni di overflow (numeri signed): A>0; B>0 e si ottiene A+B<0 A<0; B<0 e si ottiene A+B 0 A 0; B<0 e si ottiene A-B<0 A<0;B 0 e si ottiene A-B 0 Le operazioni addu,subu,mult, multu, div e divu non fanno alcun controllo sull overflow 21

Istruzioni Aritmetiche Qualche esempio Istruzione Esempio Significato Commenti add add $1,$2,$3 $1 = $2 + $3 3 operandi; eccezione possibile add immediate addi $1,$2,100 $1 = $2 + 100 + cost; eccezione possibile add unsigned addu $1,$2,$3 $1 = $2 + $3 3 operandi; nessuna eccezione add imm. unsign. addiu $1,$2,100 $1 = $2 + 100 + costante; nessuna eccezione subtract sub $1,$2,$3 $1 = $2 $3 3 operandi; eccezione possibile subtract unsigned subu $1,$2,$3 $1 = $2 $3 3 operandi; nessuna eccezione multiply mult $2,$3 Hi, Lo = $2 x $3 64-bit prodotto con segno multiply unsigned multu $2,$3 Hi, Lo = $2 x $3 64-bit prodotto senza segno divide div $2,$3 Lo = $2 $3, Lo = quoziente, Hi = resto Hi = $2 mod $3 divide unsigned divu $2,$3 Lo = $2 $3, Quoziente & resto senza segno Hi = $2 mod $3 shift right arit. sra $1,$2,10 $1 = $2 >> 10 Shift a destra (segno esteso) shift right arit.var. srav $1,$2, $3 $1 = $2 >> $3 Shift aritm. a destra di # bit var. 22 Esempio1 #a = b + c + d + e add a, b, c #a = b + c add a, a, d #a = a + d add a, a, e #a = a + e Esempio2 #f = (g + h) - (i + j) add $t0, g, h #$t0 = g + h add $t1, i, j #$t1 = i + j sub f, $t0, $t1 #f = $t0 - $t1 23 Registri e Memoria Indirizzamento al byte Le istruzioni aritmetiche operano su registri solo 32 registri ogni registro 1W (4B) il compilatore associa variabili con registri Cosa succede con programmi con tanti dati (variabili, array)? usiamo la memoria, che contiene anche i programmi Memoria MIPS indirizzata al Byte Control Datapath Processor 0 1 2 3 4 5 6... Memory Input Output I/O E l indirizzamento usato dalla maggior parte delle architetture MIPS: le parole iniziano sempre ad indirizzi multipli di 4 (vincolo di allineamento) Indirizzo = indirizzo base + offset x 4 Ordinamento dei byte in memoria big endian (MIPS, Sparc, Motorola 68k) l indirizzo di una parola corrisponde all indirizzo del byte piu significativo little endian (Intel 80x86, DEC Alpha) l indirizzo di una parola corrisponde indirizzo del byte meno significativo 24 25

Ordinamento dei byte in memoria Organizzazione della memoria L indirizzamento al byte e comodo, ma i dati sono memorizzati in words (32 bits o 4 bytes) I registri contengono 32 bits di dati Organizzazione della memoria: 2 32 bytes con indirizzi da 0 a 2 32-1 2 30... words con indirizzi 0, 4, 8,... 2 32-4 Le words sono allineate quali sono i due bits meno significativi dell indirizzo di una parola? 0 4 8 12 32 bits of data 32 bits of data 32 bits of data 32 bits of data 26 27 Istruzioni di trasferimento dati sw (Store Word) reg. => word in memoria lw (Load Word) word in memoria => reg. Forma: operatore registro, offset(indirizzo_base) #[indice] e opzionale sw ha la destinazione come ultimo operando Esempio: C code: MIPS code: A[9] = h + A[8]; # h<=>$s2; A[0]<=>$s3 lw $t0, 32($s3) add $t0, $s2, $t0 sw $t0, 36($s3) 28 Un esempio swap(int v[], int k); { int temp; temp = v[k] v[k] = v[k+1]; v[k+1] = temp; } swap: add $t1, $a1, $a1 add $t1, $t1, $t1 add $t1, $a0, $t1 lw $t0, 0($t1) lw $t2, 4($t1) sw $t2, 0($t1) sw $t0, 4($t1) jr $ra #v<=>$a0; k<=>$a1; temp<=>$t0 29

Esempio con indice variabile Spilling g = h + A[i] g $s1 h $s2 A i $s3 (indirizzo base) $s4 (offset) MIPS code: add $t1, $s4, $s4 add $t1, $t1, $t1 add $t1, $t1, $s3 lw $t0, 0($t1) add $s1, $s2, $t0 In memoria si mettono le variabili meno usate Ricorda: gli operandi aritmetici sono registri, non celle di memoria tempo accesso ai registri e minore throughput migliore 1 ciclo di clock: lettura due registri, esecuzione operazione scrittura risultato 30 31 Istruzioni di trasferimento dati ISTRUZIONE ESEMPIO SIGNIFICATO caricamento di li $s1, 10 $s1 = 10 una costante caricamento costante la $s1, ind $s1 = ind di tipo indirizzo (32bit) caricamento del byte lb $s1, ind $s1 = (ind) memorizz. all indirizzo ind caricamento della lw $s1, ind $s1 = (ind) word memorizz. all indirizzo ind memorizz. del byte sb $s1, ind ind = ($s1) contenuto nel registro $1 all indirizzo ind memorizz. della word sw $s1, ind ind = ($s1) contenuto nel registro $1 all indirizzo ind Riassumendo MIPS load/store word, con indirizzamento al byte aritmetica solo su registri Istruzioni Significato add $t1, $t2, $t3 $t1 = $t2 + $t3 sub $t1, $t2, $t3 $t1 = $t2 - $t3 lw $t0, 100($t1) $t0 = Memory[$t1+100] sw $t0, 100($t1) Memory[$t1+100] = $t0 NOTA: li e la sono pseudoistruzioni 32 33

Linguaggio macchina Linguaggio macchina Istruzioni, registri e words di dati sono di 32 bits sono rappresentati all interno del calcolatore come serie di segnali elettrici ovvero, numeri in base 2 Esempio: add $t0, $s1, $s2 I registri sono numerati: $t0=8, $s1=17, $s2=18 Formato istruzione R-type: 000000 10001 10010 01000 00000 100000 op rs rt rd shamt funct 6 bit 5 bit 5 bit 5 bit 5 bit 6 bit 34 op : codice operativo (opcode) dell istruzione rs: primo operando (registro) rt: secondo operando (registro) rd: registro destinazione, che contiene il risultato dell operazione shamt: valore dell offset (scalamento, shift amount) funct: seleziona una variante dell operazione base specificata dall opcode (codice funzione, function code) 35 Rappresentazione delle istruzioni Formato istruzione (R-type): 3 registri le istruzioni lw e sw? 2 registri e una costante 5 bit non sono sufficienti occorre nuovo formato Formato istruzione (I-type) 6bit 5bit 5bit 16bit op rs rt address opcode base Dest(lw) Spazio di indirizzamento: ±2 15 =±2 13 parole Principio di progetto 3: Rappresentazione delle istruzioni esempio lw $t0, 32($s3) lw $8, 32($19) 35 19 8 32 op rs rt address opcode base Dest Compromesso di progetto anche lw/sw sono lunghe 1w, con displacement costante (operando immediato di 16 bit) inserito direttamente nell istruzione un buon progetto richiede buoni compromessi 36 37