SlideShare a Scribd company logo
1 of 22
Download to read offline
MIPS & SPIM




                              MIPS & SPIM
              Modulo del Corso di Architettura degli Elaboratori


                                Nicola Paoletti

                              Universit` di Camerino
                                        a
                           Scuola di Scienze e Tecnologie

                                12 Aprile 2011
                                AA 2010/2011
MIPS & SPIM




Lezioni precedenti




              Lezione 1: linguaggio macchina/assembly/alto livello; RISC
              vs 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).
MIPS & SPIM
  Organizzazione della memoria




Riepilogo



      1   Organizzazione della memoria


      2   Struttura di un programma MIPS


      3   Esercizi
MIPS & SPIM
  Organizzazione della memoria




Suddivisione della memoria (1/3)
MIPS & SPIM
  Organizzazione della memoria




Suddivisione della memoria (2/3)

                                 Segmento di testo
                                 (0x400000-0x10000000): memorizza il
                                 codice (le istruzioni) del programma
                                 Segmento di dato (0x10000000-a):
                                 suddiviso in
                                      dati statici: contengono gli
                                      oggetti di dimensione nota al
                                      compilatore, la cui vita ` l’intera
                                                               e
                                      durata di esecuzione del
                                      programma
                                      dati dinamici: sono i dati allocati
                                      a run-time; tale segmento pu`   o
                                      espandersi verso l’alto per
                                      soddisfare le richieste del
                                      programma
MIPS & SPIM
  Organizzazione della memoria




Suddivisione della memoria (3/3)



                                      Segmento di testo
                                      (0x400000-0x10000000)
                                      Segmento di dato (0x10000000-a)
                                      Segmento di stack (b-0x7fffffff): di
                                      dimensione variabile; si espande verso il
                                      basso.
                                 Naturalmente deve valere: a ≤ b
MIPS & SPIM
  Organizzazione della memoria




Stack frame




                                 $fp (frame pointer) punta
                                 alla prima parola del frame;
                                 $sp (stack pointer) punta
                                 all’ultima parola dello stack
                                 Lo stack si espande verso il
                                 basso, quindi l’indirizzo
                                 puntato da $sp ` minore di
                                                   e
                                 quello puntato da $fp
MIPS & SPIM
  Organizzazione della memoria




Stack frame - Chiamate a procedura (1/3)



                                 Fase 1. Il programma chiamante inizializza lo
                                 stack
                                   1   Passa gli argomenti. I primi 4 sono memorizzati
                                       in $a0-$a3, i restanti all’inizio dello stack
                                   2   Salva i registri di competenza del chiamante
                                   3   Esegue un’istruzione $jal (jump and link), che
                                       salta alla prima istruzione del programma
                                       chiamato e salva l’indirizzo di ritorno in $ra
                                       ($31)
MIPS & SPIM
  Organizzazione della memoria




Stack frame - Chiamate a procedura (2/3)


                                 Fase 2. Il programma chiamato inizializza il
                                 suo stack frame
                                   1   Alloca lo stack frame: $sp = $sp -
                                       dimensione frame
                                   2   Salva i registri di competenza del chiamato. In
                                       particolare salva $s0 - $s7, $fp e $ra prima di
                                       modificarli, dato che il chiamante si aspetta di
                                       trovarli inalterati
                                   3   Inizializza il frame pointer: $fp = $sp +
                                       dimensione frame - 4
MIPS & SPIM
  Organizzazione della memoria




Stack frame - Chiamate a procedura (3/3)



                                 Fase 3. Il programma chiamato restituisce il
                                 controllo 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 salto
                                       all’indirizzo in $ra
MIPS & SPIM
  Organizzazione della memoria




Esempio di chiamata a procedura (1/4)


      main ( )
      {
        printf (” I l            fattoriale   d i 10 e ’ %dn” , f a c t ( 1 0 ) ) ;
      }

      int fact ( int n)
      {
        i f ( n < 1)
            return 1;
        else
            r e t u r n n∗ f a c t ( n − 1 ) ;
      }

                                       Listing 1: Fattoriale in C
MIPS & SPIM
  Organizzazione della memoria




Esempio di chiamata a procedura (2/4)

        .text
        . g l o b l main
      main :
        subu $sp , $sp , 3 2           #Lo S t a c k f r a m e e ’ g r a n d e 32 b y t e s
        sw $ra , 2 0 ( $sp )           #S a l v a l ’ i n d i r i z z o d i r i t o r n o
        sw $fp , 1 6 ( $sp )           #S a l v a i l v e c c h i o f r a m e p o i n t e r
        a d d i u $fp , $sp , 2 8      #I n i z i a l i z z a i l frame p o i n t e r

        l i $a0 , 1 0                #Me tte l ’ argom e nto ( 1 0 ) i n $a0
        ja l fact                    #Chiama l a f u n z i o n e f a t t o r i a l e
        l a $a0 , $LC                #Me tte i n $a0 l a v a r i a b i l e s t r i n g a $LC
        move $a1 , $v0               #S p o s t a i l r i s u l t a t o d i f a c t i n $a1
        jal printf                   #Chiama l a f u n z i o n e p r i n t f

         l w $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 o
         l w $fp , 1 6 ( $sp )         #R i p r i s t i n a i l f r a m e p o i n t e r
         a d d i u $sp , $sp , 3 2     #L i b e r a l o s t a c k f r a m e
         j r $ra                       #R i t o r n a i l c o n t r o l l o a l c h i a m a n t e

        .data
      $LC :
        .ascii ”Il        fattoriale          d i 10 e ’ %dn”


                        Listing 2: Fattoriale in MIPS - Procedura main
MIPS & SPIM
  Organizzazione della memoria




Esempio di chiamata a procedura (3/4)


        .text
      fact :
        subu $sp , $sp , 3 2           #Lo S t a c k f r a m e e ’ g r a n d e 32 b y t e s
        sw $ra , 2 0 ( $ s p )         #S a l v a l ’ i n d i r i z z o d i r i t o r n o
        sw $fp , 1 6 ( $ s p )         #S a l v a i l f r a m e p o i n t e r
        a d d i u $fp , $sp , 2 8      #I n i z i a l i z z a i l f r a m e p o i n t e r
        sw $a0 , 0 ( $ f p )           #S a l v a l ’ argomento ( n )

          lw $v0 , 0 ( $ f p )      #C a r i c a n
          b g t z $v0 , $L2         #Se n>0 va a l l ’ i s t r u z i o n e $L2
          l i $v0 , 1               #a l t r i m e n t i r i t o r n a 1
          j r $L1                   #p a s s a n d o p e r l ’ i s t r u z i o n e $L1

                  Listing 3: Fattoriale in MIPS - Procedura fact (1/2)
MIPS & SPIM
  Organizzazione della memoria




Esempio di chiamata a procedura (4/4)

      $L2 :
        lw $v1 , 0 ( $ f p )      #C a r i c a n
        subu $v0 , $v1 , 1        #C a l c o l a n − 1
        move $a0 , $v0            #S p o s t a i l r i s u l t a t o i n $a0
        j a l fact                #Chiama f a c t
        lw $v1 , 0 ( $ f p )      #C a r i c a n
        mul $v0 , $v0 , $v1       #C a 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 $v0
        lw $ra , 2 0 ( $ s p )       #R i p r i s t i n a $ r a
        lw $fp , 1 6 ( $ s p )       #R i p r i s t i n a i l f r a m e p o i n t e r
        a d d i u $sp , $sp , 32     #L i b e r a l o s t a c k f r a m e
        j 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)
MIPS & SPIM
  Organizzazione della memoria




Esempio di chiamata a procedura - Stack
MIPS & SPIM
  Struttura di un programma MIPS




Riepilogo



     1    Organizzazione della memoria


     2    Struttura di un programma MIPS


     3    Esercizi
MIPS & SPIM
  Struttura di un programma MIPS




Struttura di un programma MIPS



              .GLOBL
                    Dichiara un elemento come globale
                    Elementi globali possono essere riferiti da altri files
                    Il main ` dichiarato .GLOBL
                            e
              .TEXT: definisce il segmento di codice
              .DATA
                    Definisce il segmento di dato
                    Dipendentemente dalle variabili dichiarate, l’assembler alloca lo
                    spazio necessario al segmento
MIPS & SPIM
  Struttura di un programma MIPS




.DATA




     Permette di allocare dati associando un nome (label)

          [name:]           directive   initializer [, initializer]+
             ⇓                  ⇓                     ⇓
           var1:              .WORD                  10
MIPS & SPIM
  Struttura di un programma MIPS




Tipi di dato

                                        1
              .BYTE: un dato da 8 bit ( 4 di parola, 1 byte)
              .HALF: un dato da 16 bit ( 1 di parola, 2 byte)
                                         2
              .WORD: un dato da 32 bit (una parola, 4 byte)
              .FLOAT: single precision floating point - un valore decimale a
              32 bit
              .DOUBLE: double precision floating point - un valore decimale
              a 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
MIPS & SPIM
  Esercizi




Riepilogo



      1      Organizzazione della memoria


      2      Struttura di un programma MIPS


      3      Esercizi
MIPS & SPIM
  Esercizi




Homeworks (1/2)

      Potenza iterativa
      Scrivere una procedura MIPS che calcola la potenza ab , con
      a ∈ N+ , b ∈ N in modo iterativo, ovvero:
      int potenza iterativa ( int a , int b)
      {
              i f ( a < 1 | | b < 0)
                         return 0;
              else {
                         int ret = 1;
                         f o r ( i n t i =0; i <b ; i ++)
                                       ret = ret ∗ a ;
                         return ret ;
              }
      }
MIPS & SPIM
  Esercizi




Homeworks (2/2)

      Potenza ricorsiva
      Scrivere una procedura MIPS che calcola la potenza ab , con
      a ∈ N+ , b ∈ N in modo ricorsivo, ovvero:
      int potenza ricorsiva ( int a , int b)
      {

               i f ( a < 1 | | b < 0)
                             return 0;
               e l s e i f ( b == 0 )
                             return 1;
               else
                             r 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 ;

      }

More Related Content

Similar to Lezione4 - MIPS & SPIM Unicam

Lezione5 - MIPS & SPIM Unicam
Lezione5 - MIPS & SPIM UnicamLezione5 - MIPS & SPIM Unicam
Lezione5 - MIPS & SPIM UnicamNicola Paoletti
 
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...UltraUploader
 
Attacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflowAttacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflowGiacomo Antonino Fazio
 
14 - Programmazione: Stream e File
14 - Programmazione: Stream e File14 - Programmazione: Stream e File
14 - Programmazione: Stream e FileMajong DevJfu
 
Multithreading, multiprocessing e Asincronia
Multithreading, multiprocessing e AsincroniaMultithreading, multiprocessing e Asincronia
Multithreading, multiprocessing e AsincroniaSebastiano Merlino (eTr)
 
Attacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflowAttacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflowGiacomo Antonino Fazio
 
Performance dei sistemi di calcolo
Performance dei sistemi di calcoloPerformance dei sistemi di calcolo
Performance dei sistemi di calcoloMajong DevJfu
 
Laboratorio Programmazione: Memoria dinamica
Laboratorio Programmazione: Memoria dinamicaLaboratorio Programmazione: Memoria dinamica
Laboratorio Programmazione: Memoria dinamicaMajong DevJfu
 

Similar to Lezione4 - MIPS & SPIM Unicam (11)

Lezione5 - MIPS & SPIM Unicam
Lezione5 - MIPS & SPIM UnicamLezione5 - MIPS & SPIM Unicam
Lezione5 - MIPS & SPIM Unicam
 
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
 
Vulnerabilità exploit
Vulnerabilità exploitVulnerabilità exploit
Vulnerabilità exploit
 
Pycon
PyconPycon
Pycon
 
Attacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflowAttacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflow
 
14 - Programmazione: Stream e File
14 - Programmazione: Stream e File14 - Programmazione: Stream e File
14 - Programmazione: Stream e File
 
Multithreading, multiprocessing e Asincronia
Multithreading, multiprocessing e AsincroniaMultithreading, multiprocessing e Asincronia
Multithreading, multiprocessing e Asincronia
 
Attacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflowAttacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflow
 
Performance dei sistemi di calcolo
Performance dei sistemi di calcoloPerformance dei sistemi di calcolo
Performance dei sistemi di calcolo
 
FPGrowth
FPGrowthFPGrowth
FPGrowth
 
Laboratorio Programmazione: Memoria dinamica
Laboratorio Programmazione: Memoria dinamicaLaboratorio Programmazione: Memoria dinamica
Laboratorio Programmazione: Memoria dinamica
 

Lezione4 - MIPS & SPIM Unicam

  • 1. MIPS & SPIM MIPS & SPIM Modulo del Corso di Architettura degli Elaboratori Nicola Paoletti Universit` di Camerino a Scuola di Scienze e Tecnologie 12 Aprile 2011 AA 2010/2011
  • 2. MIPS & SPIM Lezioni precedenti Lezione 1: linguaggio macchina/assembly/alto livello; RISC vs 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).
  • 3. MIPS & SPIM Organizzazione della memoria Riepilogo 1 Organizzazione della memoria 2 Struttura di un programma MIPS 3 Esercizi
  • 4. MIPS & SPIM Organizzazione della memoria Suddivisione della memoria (1/3)
  • 5. MIPS & SPIM Organizzazione della memoria Suddivisione della memoria (2/3) Segmento di testo (0x400000-0x10000000): memorizza il codice (le istruzioni) del programma Segmento di dato (0x10000000-a): suddiviso in dati statici: contengono gli oggetti di dimensione nota al compilatore, la cui vita ` l’intera e durata di esecuzione del programma dati dinamici: sono i dati allocati a run-time; tale segmento pu` o espandersi verso l’alto per soddisfare le richieste del programma
  • 6. MIPS & SPIM Organizzazione della memoria Suddivisione della memoria (3/3) Segmento di testo (0x400000-0x10000000) Segmento di dato (0x10000000-a) Segmento di stack (b-0x7fffffff): di dimensione variabile; si espande verso il basso. Naturalmente deve valere: a ≤ b
  • 7. MIPS & SPIM Organizzazione della memoria Stack frame $fp (frame pointer) punta alla prima parola del frame; $sp (stack pointer) punta all’ultima parola dello stack Lo stack si espande verso il basso, quindi l’indirizzo puntato da $sp ` minore di e quello puntato da $fp
  • 8. MIPS & SPIM Organizzazione della memoria Stack frame - Chiamate a procedura (1/3) Fase 1. Il programma chiamante inizializza lo stack 1 Passa gli argomenti. I primi 4 sono memorizzati in $a0-$a3, i restanti all’inizio dello stack 2 Salva i registri di competenza del chiamante 3 Esegue un’istruzione $jal (jump and link), che salta alla prima istruzione del programma chiamato e salva l’indirizzo di ritorno in $ra ($31)
  • 9. MIPS & SPIM Organizzazione della memoria Stack frame - Chiamate a procedura (2/3) Fase 2. Il programma chiamato inizializza il suo stack frame 1 Alloca lo stack frame: $sp = $sp - dimensione frame 2 Salva i registri di competenza del chiamato. In particolare salva $s0 - $s7, $fp e $ra prima di modificarli, dato che il chiamante si aspetta di trovarli inalterati 3 Inizializza il frame pointer: $fp = $sp + dimensione frame - 4
  • 10. MIPS & SPIM Organizzazione della memoria Stack frame - Chiamate a procedura (3/3) Fase 3. Il programma chiamato restituisce il controllo 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 salto all’indirizzo in $ra
  • 11. MIPS & SPIM Organizzazione della memoria Esempio di chiamata a procedura (1/4) main ( ) { printf (” I l fattoriale d i 10 e ’ %dn” , f a c t ( 1 0 ) ) ; } int fact ( int n) { i f ( n < 1) return 1; else r e t u r n n∗ f a c t ( n − 1 ) ; } Listing 1: Fattoriale in C
  • 12. MIPS & SPIM Organizzazione della memoria Esempio di chiamata a procedura (2/4) .text . g l o b l main main : subu $sp , $sp , 3 2 #Lo S t a c k f r a m e e ’ g r a n d e 32 b y t e s sw $ra , 2 0 ( $sp ) #S a l v a l ’ i n d i r i z z o d i r i t o r n o sw $fp , 1 6 ( $sp ) #S a l v a i l v e c c h i o f r a m e p o i n t e r a d d i u $fp , $sp , 2 8 #I n i z i a l i z z a i l frame p o i n t e r l i $a0 , 1 0 #Me tte l ’ argom e nto ( 1 0 ) i n $a0 ja l fact #Chiama l a f u n z i o n e f a t t o r i a l e l a $a0 , $LC #Me tte i n $a0 l a v a r i a b i l e s t r i n g a $LC move $a1 , $v0 #S p o s t a i l r i s u l t a t o d i f a c t i n $a1 jal printf #Chiama l a f u n z i o n e p r i n t f l w $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 o l w $fp , 1 6 ( $sp ) #R i p r i s t i n a i l f r a m e p o i n t e r a d d i u $sp , $sp , 3 2 #L i b e r a l o s t a c k f r a m e j r $ra #R i t o r n a i l c o n t r o l l o a l c h i a m a n t e .data $LC : .ascii ”Il fattoriale d i 10 e ’ %dn” Listing 2: Fattoriale in MIPS - Procedura main
  • 13. MIPS & SPIM Organizzazione della memoria Esempio di chiamata a procedura (3/4) .text fact : subu $sp , $sp , 3 2 #Lo S t a c k f r a m e e ’ g r a n d e 32 b y t e s sw $ra , 2 0 ( $ s p ) #S a l v a l ’ i n d i r i z z o d i r i t o r n o sw $fp , 1 6 ( $ s p ) #S a l v a i l f r a m e p o i n t e r a d d i u $fp , $sp , 2 8 #I n i z i a l i z z a i l f r a m e p o i n t e r sw $a0 , 0 ( $ f p ) #S a l v a l ’ argomento ( n ) lw $v0 , 0 ( $ f p ) #C a r i c a n b g t z $v0 , $L2 #Se n>0 va a l l ’ i s t r u z i o n e $L2 l i $v0 , 1 #a l t r i m e n t i r i t o r n a 1 j r $L1 #p a s s a n d o p e r l ’ i s t r u z i o n e $L1 Listing 3: Fattoriale in MIPS - Procedura fact (1/2)
  • 14. MIPS & SPIM Organizzazione della memoria Esempio di chiamata a procedura (4/4) $L2 : lw $v1 , 0 ( $ f p ) #C a r i c a n subu $v0 , $v1 , 1 #C a l c o l a n − 1 move $a0 , $v0 #S p o s t a i l r i s u l t a t o i n $a0 j a l fact #Chiama f a c t lw $v1 , 0 ( $ f p ) #C a r i c a n mul $v0 , $v0 , $v1 #C a 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 $v0 lw $ra , 2 0 ( $ s p ) #R i p r i s t i n a $ r a lw $fp , 1 6 ( $ s p ) #R i p r i s t i n a i l f r a m e p o i n t e r a d d i u $sp , $sp , 32 #L i b e r a l o s t a c k f r a m e j 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)
  • 15. MIPS & SPIM Organizzazione della memoria Esempio di chiamata a procedura - Stack
  • 16. MIPS & SPIM Struttura di un programma MIPS Riepilogo 1 Organizzazione della memoria 2 Struttura di un programma MIPS 3 Esercizi
  • 17. MIPS & SPIM Struttura di un programma MIPS Struttura di un programma MIPS .GLOBL Dichiara un elemento come globale Elementi globali possono essere riferiti da altri files Il main ` dichiarato .GLOBL e .TEXT: definisce il segmento di codice .DATA Definisce il segmento di dato Dipendentemente dalle variabili dichiarate, l’assembler alloca lo spazio necessario al segmento
  • 18. MIPS & SPIM Struttura di un programma MIPS .DATA Permette di allocare dati associando un nome (label) [name:] directive initializer [, initializer]+ ⇓ ⇓ ⇓ var1: .WORD 10
  • 19. MIPS & SPIM Struttura di un programma MIPS Tipi di dato 1 .BYTE: un dato da 8 bit ( 4 di parola, 1 byte) .HALF: un dato da 16 bit ( 1 di parola, 2 byte) 2 .WORD: un dato da 32 bit (una parola, 4 byte) .FLOAT: single precision floating point - un valore decimale a 32 bit .DOUBLE: double precision floating point - un valore decimale a 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
  • 20. MIPS & SPIM Esercizi Riepilogo 1 Organizzazione della memoria 2 Struttura di un programma MIPS 3 Esercizi
  • 21. MIPS & SPIM Esercizi Homeworks (1/2) Potenza iterativa Scrivere una procedura MIPS che calcola la potenza ab , con a ∈ N+ , b ∈ N in modo iterativo, ovvero: int potenza iterativa ( int a , int b) { i f ( a < 1 | | b < 0) return 0; else { int ret = 1; f o r ( i n t i =0; i <b ; i ++) ret = ret ∗ a ; return ret ; } }
  • 22. MIPS & SPIM Esercizi Homeworks (2/2) Potenza ricorsiva Scrivere una procedura MIPS che calcola la potenza ab , con a ∈ N+ , b ∈ N in modo ricorsivo, ovvero: int potenza ricorsiva ( int a , int b) { i f ( a < 1 | | b < 0) return 0; e l s e i f ( b == 0 ) return 1; else r 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 ; }