lezione4 - mips & spim unicam

22
MIPS & SPIM MIPS & SPIM Modulo del Corso di Architettura degli Elaboratori Nicola Paoletti Universit` a di Camerino Scuola di Scienze e Tecnologie 12 Aprile 2011 AA 2010/2011

Upload: nicola-paoletti

Post on 08-Jul-2015

972 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Lezione4 - MIPS & SPIM Unicam

MIPS & SPIM

MIPS & SPIMModulo del Corso di Architettura degli Elaboratori

Nicola Paoletti

Universita di CamerinoScuola di Scienze e Tecnologie

12 Aprile 2011AA 2010/2011

Page 2: Lezione4 - MIPS & SPIM Unicam

MIPS & SPIM

Lezioni precedenti

Lezione 1: linguaggio macchina/assembly/alto livello; RISCvs CISC.

Lezione 2: Introduzione al MIPS Instruction Set; registri;istruzioni aritmetiche e di data transfer.

Lezione 3: Codifica delle istruzioni (R-type, I-type, J-type).

Page 3: Lezione4 - MIPS & SPIM Unicam

MIPS & SPIM

Organizzazione della memoria

Riepilogo

1 Organizzazione della memoria

2 Struttura di un programma MIPS

3 Esercizi

Page 4: Lezione4 - MIPS & SPIM Unicam

MIPS & SPIM

Organizzazione della memoria

Suddivisione della memoria (1/3)

Riservata400000

10000000

7fff fffc

Segmento di dato

Segmento di testo

Segmento di stack

hex

hex

hex

Dati statici

Dati dinamici

Page 5: Lezione4 - MIPS & SPIM Unicam

MIPS & SPIM

Organizzazione della memoria

Suddivisione della memoria (2/3)

Riservata400000

10000000

7fff fffc

Segmento di dato

Segmento di testo

Segmento di stack

hex

hex

hex

Dati statici

Dati dinamici

Segmento di testo(0x400000-0x10000000): memorizza ilcodice (le istruzioni) del programma

Segmento di dato (0x10000000-a):

suddiviso in

dati statici: contengono glioggetti di dimensione nota alcompilatore, la cui vita e l’interadurata di esecuzione delprogrammadati dinamici: sono i dati allocatia run-time; tale segmento puoespandersi verso l’alto persoddisfare le richieste delprogramma

Page 6: Lezione4 - MIPS & SPIM Unicam

MIPS & SPIM

Organizzazione della memoria

Suddivisione della memoria (3/3)

Riservata400000

10000000

7fff fffc

Segmento di dato

Segmento di testo

Segmento di stack

hex

hex

hex

Dati statici

Dati dinamici

Segmento di testo(0x400000-0x10000000)

Segmento di dato (0x10000000-a)

Segmento di stack (b-0x7fffffff): didimensione variabile; si espande verso ilbasso.

Naturalmente deve valere: a ≤ b

Page 7: Lezione4 - MIPS & SPIM Unicam

MIPS & SPIM

Organizzazione della memoria

Stack frame

Indirizzi di memoria alti

Indirizzi di memoria bassi

Lo stack

cresce

$fp

$sp

Variabili

locali

Registri

salvati

Argomento 5

Argomento 6

...

$fp (frame pointer) puntaalla prima parola del frame;$sp (stack pointer) puntaall’ultima parola dello stack

Lo stack si espande verso ilbasso, quindi l’indirizzopuntato da $sp e minore diquello puntato da $fp

Page 8: Lezione4 - MIPS & SPIM Unicam

MIPS & SPIM

Organizzazione della memoria

Stack frame - Chiamate a procedura (1/3)

Indirizzi di memoria alti

Indirizzi di memoria bassi

Lo stack

cresce

$fp

$sp

Variabili

locali

Registri

salvati

Argomento 5

Argomento 6

...

Fase 1. Il programma chiamante inizializza lostack

1 Passa gli argomenti. I primi 4 sono memorizzatiin $a0-$a3, i restanti all’inizio dello stack

2 Salva i registri di competenza del chiamante

3 Esegue un’istruzione $jal (jump and link), chesalta alla prima istruzione del programmachiamato e salva l’indirizzo di ritorno in $ra

($31)

Page 9: Lezione4 - MIPS & SPIM Unicam

MIPS & SPIM

Organizzazione della memoria

Stack frame - Chiamate a procedura (2/3)

Indirizzi di memoria alti

Indirizzi di memoria bassi

Lo stack

cresce

$fp

$sp

Variabili

locali

Registri

salvati

Argomento 5

Argomento 6

...

Fase 2. Il programma chiamato inizializza ilsuo stack frame

1 Alloca lo stack frame: $sp = $sp -

dimensione frame

2 Salva i registri di competenza del chiamato. Inparticolare salva $s0 - $s7, $fp e $ra prima dimodificarli, dato che il chiamante si aspetta ditrovarli inalterati

3 Inizializza il frame pointer: $fp = $sp +

dimensione frame - 4

Page 10: Lezione4 - MIPS & SPIM Unicam

MIPS & SPIM

Organizzazione della memoria

Stack frame - Chiamate a procedura (3/3)

Indirizzi di memoria alti

Indirizzi di memoria bassi

Lo stack

cresce

$fp

$sp

Variabili

locali

Registri

salvati

Argomento 5

Argomento 6

...

Fase 3. Il programma chiamato restituisce ilcontrollo al chiamante

1 Salva eventuali valori di ritorno in $v0

2 Ripristina i registri salvati

3 Libera lo stack frame: $sp = $sp +

dimensione frame

4 Restituisce il controllo, facendo un saltoall’indirizzo in $ra

Page 11: Lezione4 - MIPS & SPIM Unicam

MIPS & SPIM

Organizzazione della memoria

Esempio di chiamata a procedura (1/4)

main ( ){

p r i n t f ( ” I l f a t t o r i a l e d i 10 e ’ %d\n” , f a c t (10) ) ;}

i n t f a c t ( i n t n ){

i f ( n < 1)r e t u r n 1 ;

e l s er e t u r n n∗ f a c t ( n − 1) ;

}

Listing 1: Fattoriale in C

Page 12: Lezione4 - MIPS & SPIM Unicam

MIPS & SPIM

Organizzazione della memoria

Esempio di chiamata a procedura (2/4)

. t e x t

. g l o b l mainmain :

subu $sp , $sp , 32 #Lo Stack f rame e ’ grande 32 byt e ssw $ra , 2 0 ( $sp ) #Sa l va l ’ i n d i r i z z o d i r i t o r n osw $fp , 1 6 ( $sp ) #Sa l va i l v e c c h i o f rame p o i n t e raddiu $fp , $sp , 28 #I n i z i a l i z z a i l f rame p o i n t e r

l i $a0 , 10 #Mette l ’ argomento ( 10) i n $a0j a l f a c t #Chiama l a f u n z i o n e f a t t o r i a l el a $a0 , $LC #Mette i n $a0 l a v a r i a b i l e s t r i n g a $LCmove $a1 , $v0 #Sposta i l r i s u l t a t o d i f a c t i n $a1j a l p r i n t f #Chiama l a f u n z i o n e p r i n t f

lw $ra , 2 0 ( $sp ) #R i p r i s t i n a l ’ i n d i r i z z o d i r i t o r n olw $fp , 1 6 ( $sp ) #R i p r i s t i n a i l f rame p o i n t e raddiu $sp , $sp , 32 #L i b e r a l o s t ac k f ramej r $ra #Ri to rna i l c o n t r o l l o a l ch iamante

. da ta$LC :

. a s c i i ” I l f a t t o r i a l e d i 10 e ’ %d\n”

Listing 2: Fattoriale in MIPS - Procedura main

Page 13: Lezione4 - MIPS & SPIM Unicam

MIPS & SPIM

Organizzazione della memoria

Esempio di chiamata a procedura (3/4)

. t e x tf a c t :

subu $sp , $sp ,32 #Lo Stack frame e ’ grande 32 b y t e ssw $ra , 20 ( $sp ) #Sa lva l ’ i n d i r i z z o d i r i t o r n osw $fp , 16 ( $sp ) #Sa lva i l f rame p o i n t e radd iu $fp , $sp ,28 #I n i z i a l i z z a i l f rame p o i n t e rsw $a0 , 0 ( $fp ) #Sa lva l ’ argomento ( n )

lw $v0 , 0 ( $fp ) #Ca r i c a nbgtz $v0 , $L2 #Se n>0 va a l l ’ i s t r u z i o n e $L2l i $v0 , 1 #a l t r i m e n t i r i t o r n a 1j r $L1 #passando pe r l ’ i s t r u z i o n e $L1

Listing 3: Fattoriale in MIPS - Procedura fact (1/2)

Page 14: Lezione4 - MIPS & SPIM Unicam

MIPS & SPIM

Organizzazione della memoria

Esempio di chiamata a procedura (4/4)

$L2 :lw $v1 , 0 ( $fp ) #Ca r i c a nsubu $v0 , $v1 , 1 #Ca l c o l a n − 1move $a0 , $v0 #Sposta i l r i s u l t a t o i n $a0j a l f a c t #Chiama f a c tlw $v1 , 0 ( $fp ) #Ca r i c a nmul $v0 , $v0 , $v1 #Ca l c o l a f a c t (n−1) ∗ n

$L1 : #I l r i s u l t a t o e ’ i n $v0lw $ra , 20( $sp ) #R i p r i s t i n a $ralw $fp , 16( $sp ) #R i p r i s t i n a i l f rame p o i n t e radd iu $sp , $sp , 32 #L ib e r a l o s t a c k framej r $ra #R i t o r n a i l c o n t r o l l o a l c a l l e r

Listing 4: Fattoriale in MIPS - Procedura fact (2/2)

Page 15: Lezione4 - MIPS & SPIM Unicam

MIPS & SPIM

Organizzazione della memoria

Esempio di chiamata a procedura - Stack

main

fact (10)

fact (9)

fact (8)Vecchio $a0

Vecchio $ra

Vecchio $fp

Vecchio $a0

Vecchio $ra

Vecchio $fp

Vecchio $a0

Vecchio $ra

Vecchio $fp

Vecchio $ra

Vecchio $fp

STACK

Lo stack

cresce

Page 16: Lezione4 - MIPS & SPIM Unicam

MIPS & SPIM

Struttura di un programma MIPS

Riepilogo

1 Organizzazione della memoria

2 Struttura di un programma MIPS

3 Esercizi

Page 17: Lezione4 - MIPS & SPIM Unicam

MIPS & SPIM

Struttura di un programma MIPS

Struttura di un programma MIPS

.GLOBL

Dichiara un elemento come globaleElementi globali possono essere riferiti da altri filesIl main e dichiarato .GLOBL

.TEXT: definisce il segmento di codice

.DATA

Definisce il segmento di dato

Dipendentemente dalle variabili dichiarate, l’assembler alloca lospazio necessario al segmento

Page 18: Lezione4 - MIPS & SPIM Unicam

MIPS & SPIM

Struttura di un programma MIPS

.DATA

Permette di allocare dati associando un nome (label)

[name:] directive initializer [, initializer]+

⇓ ⇓ ⇓var1: .WORD 10

Page 19: Lezione4 - MIPS & SPIM Unicam

MIPS & SPIM

Struttura di un programma MIPS

Tipi di dato

.BYTE: un dato da 8 bit (14 di parola, 1 byte)

.HALF: un dato da 16 bit (12 di parola, 2 byte)

.WORD: un dato da 32 bit (una parola, 4 byte)

.FLOAT: single precision floating point - un valore decimale a32 bit

.DOUBLE: double precision floating point - un valore decimalea 64 bit

.ASCII: una stringa ASCII

.ASCIIZ: una stringa ASCII terminata dal carattere nullo(NUL o ‘\0’)

.SPACE: alloca spazio per n bytes non inizializzati

Page 20: Lezione4 - MIPS & SPIM Unicam

MIPS & SPIM

Esercizi

Riepilogo

1 Organizzazione della memoria

2 Struttura di un programma MIPS

3 Esercizi

Page 21: Lezione4 - MIPS & SPIM Unicam

MIPS & SPIM

Esercizi

Homeworks (1/2)

Potenza iterativa

Scrivere una procedura MIPS che calcola la potenza ab, cona ∈ N

+, b ∈ N in modo iterativo, ovvero:

i n t p o t e n z a i t e r a t i v a ( i n t a , i n t b ){

i f ( a < 1 | | b < 0)r e t u r n 0 ;

e l s e {i n t r e t = 1 ;f o r ( i n t i =0; i<b ; i++)

r e t = r e t ∗ a ;r e t u r n r e t ;

}}

Page 22: Lezione4 - MIPS & SPIM Unicam

MIPS & SPIM

Esercizi

Homeworks (2/2)

Potenza ricorsiva

Scrivere una procedura MIPS che calcola la potenza ab, cona ∈ N

+, b ∈ N in modo ricorsivo, ovvero:

i n t p o t e n z a r i c o r s i v a ( i n t a , i n t b ){

i f ( a < 1 | | b < 0)r e t u r n 0 ;

e l s e i f ( b == 0)r e t u r n 1 ;

e l s er e t u r n p o t e n z a r i c o r s i v a ( a , b−1)∗a ;

}