MIPS & SPIM                              MIPS & SPIM              Modulo del Corso di Architettura degli Elaboratori      ...
MIPS & SPIMLezioni precedenti              Lezione 1: linguaggio macchina/assembly/alto livello; RISC              vs CISC...
MIPS & SPIM  Introduzione a SPIMRiepilogo      1   Introduzione a SPIM      2   Esercizi            Correzione esercizi   ...
MIPS & SPIM  Introduzione a SPIMIl tool SPIM              SPIM ` un simulatore open source per programmi assembly         ...
MIPS & SPIM  Introduzione a SPIMQtSPIM - GUI (1/2)
MIPS & SPIM  Introduzione a SPIMQtSPIM - GUI (2/2)
MIPS & SPIM  Introduzione a SPIMQtSPIM - Alcune Feature              Implementa quasi completamente il MIPS32 instruction ...
MIPS & SPIM  Introduzione a SPIMSPIM - Sintassi              Codice commentato con #              Gli identificativi sono n...
MIPS & SPIM  Introduzione a SPIMSPIM - System Call (1/3)              Fornisce un piccolo insieme di servizi tipici dei si...
MIPS & SPIM  Introduzione a SPIMSPIM - System Call (2/3)        Service         Code Arguments            Result        pr...
MIPS & SPIM  Introduzione a SPIMSPIM - System Call (3/3)        Service           Code Arguments                   Result ...
MIPS & SPIM  Introduzione a SPIMEsempi (1/4)     Example (Hello world!)          .data      s t r : . a s c i i z ” H e l ...
MIPS & SPIM  Introduzione a SPIMEsempi (2/4)     Example (Lettura e stampa di un intero)          .data      s t r 1 : . a...
MIPS & SPIM  Introduzione a SPIMEsempi (3/4)     Example (Lettura e stampa di una stringa)          .data      s t r : . s...
MIPS & SPIM  Introduzione a SPIMEsempi (4/4)     Example (Indirizzo e valore)         .data      val :  . w o r d 0xA #10 ...
MIPS & SPIM  EserciziRiepilogo      1      Introduzione a SPIM      2      Esercizi               Correzione esercizi     ...
MIPS & SPIM  Esercizi    Correzione eserciziRiepilogo      1      Introduzione a SPIM      2      Esercizi               C...
MIPS & SPIM  Esercizi    Correzione eserciziPotenza iterativa (1/4)      Potenza iterativa      Scrivere una procedura MIP...
MIPS & SPIM  Esercizi    Correzione eserciziPotenza iterativa (2/4)         .data      A:       . w o r d 0xA #a=10      B...
MIPS & SPIM  Esercizi    Correzione eserciziPotenza iterativa (3/4)       for :          beq $a0 , $0 , p r i n t #B==0 −>...
MIPS & SPIM  Esercizi    Correzione eserciziPotenza iterativa (4/4)                      ...                      l a $a0 ...
MIPS & SPIM  Esercizi    Correzione eserciziPotenza ricorsiva (1/4)      Potenza ricorsiva      Scrivere una procedura MIP...
MIPS & SPIM  Esercizi    Correzione eserciziPotenza ricorsiva (2/4)         .data       ...        .text        . g l o b ...
MIPS & SPIM  Esercizi    Correzione eserciziPotenza ricorsiva (3/4)        .text      pow : subu $sp , $sp , 3 2          ...
MIPS & SPIM  Esercizi    Correzione eserciziPotenza ricorsiva (4/4)      $L2 :       lw $v1 , 0 ( $ f p )        #C a r i ...
MIPS & SPIM  Esercizi    HomeworksRiepilogo      1      Introduzione a SPIM      2      Esercizi               Correzione ...
MIPS & SPIM  Esercizi    HomeworksAdding machine      Adding machine      Scrivere e testare un programma MIPS che legge i...
Upcoming SlideShare
Loading in...5
×

Lezione5 - MIPS & SPIM Unicam

1,372

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,372
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
53
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Lezione5 - MIPS & SPIM Unicam

  1. 1. MIPS & SPIM MIPS & SPIM Modulo del Corso di Architettura degli Elaboratori Nicola Paoletti Universit` di Camerino a Scuola di Scienze e Tecnologie 27 Aprile 2011 AA 2010/2011
  2. 2. MIPS & SPIMLezioni 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). Lezione 4: Organizzazione della memoria, stack frame; chiamate a procedura (esempio fattoriale); direttive.
  3. 3. MIPS & SPIM Introduzione a SPIMRiepilogo 1 Introduzione a SPIM 2 Esercizi Correzione esercizi Homeworks
  4. 4. MIPS & SPIM Introduzione a SPIMIl tool SPIM SPIM ` un simulatore open source per programmi assembly e MIPS32 Naturalmente, non esegue programmi binari (compilati)! La nuova versione - QtSPIM - ` disponibile all’indirizzo e https://sourceforge.net/projects/spimsimulator/files/; supporta Windows - MacOSX - Linux(solo 32bit); per chi ha Linux a 64 bit si pu`: o compilare i sorgenti, oppure emulare la versione Windows con Wine La vecchia pagina del simulatore in cui ` possibile trovare e ulteriore materiale ` all’indirizzo e http://pages.cs.wisc.edu/~larus/spim.html
  5. 5. MIPS & SPIM Introduzione a SPIMQtSPIM - GUI (1/2)
  6. 6. MIPS & SPIM Introduzione a SPIMQtSPIM - GUI (2/2)
  7. 7. MIPS & SPIM Introduzione a SPIMQtSPIM - Alcune Feature Implementa quasi completamente il MIPS32 instruction set Esecuzione/Esecuzione step-by-step/Debug System calls
  8. 8. MIPS & SPIM Introduzione a SPIMSPIM - Sintassi Codice commentato con # Gli identificativi sono nel formato [a-zA-Z. ][a-zA-Z0-9. ]∗ Gli opcode delle istruzioni non possono essere messi come identificativi label: I numeri sono di default in base 10; valori hex indicati con 0xN Le stringhe sono delimitate da “”
  9. 9. MIPS & SPIM Introduzione a SPIMSPIM - System Call (1/3) Fornisce un piccolo insieme di servizi tipici dei sistemi operativi Principalmente operazioni di input/output Per richiedere un servizio, bisogna caricare in $v0 il system call code Example (Exit service) li $v0, 10 syscall # esce dalla procedura
  10. 10. MIPS & SPIM Introduzione a SPIMSPIM - System Call (2/3) Service Code Arguments Result print int 1 $a0 = integer print float 2 $f12 = float print double 3 $f12 = double print string 4 $a0 = string read int 5 integer (in $v0) read float 6 float (in $f0) read double 7 double (in $f0) read string 8 $a0 = buffer, $a1 = length sbrk 9 $a0 = amount address (in $v0) exit 10
  11. 11. MIPS & SPIM Introduzione a SPIMSPIM - System Call (3/3) Service Code Arguments Result print character 11 $a0 = character read character 12 character (in $v0) open 13 $a0 = filename, $a1 = file descriptor (in $v0) flags, $a2 = mode read 14 $a0 = file descriptor, $a1 bytes read (in $v0) = buffer, $a2 = count write 15 $a0 = file descriptor, $a1 bytes written (in $v0) = buffer, $a2 = count close 16 $a0 = file descriptor 0 (in $v0) exit2 17 $a0 = result
  12. 12. MIPS & SPIM Introduzione a SPIMEsempi (1/4) Example (Hello world!) .data s t r : . a s c i i z ” H e l l o World ! ” #s t r i n g a d i c a r a t t e r i .text . g l o b l main main : l i $v0 , 4 #c o d i c e p e r p r i n t s t r i n g l a $a0 , s t r #c a r i c o i n $a0 l a s t r i n g a con l a b e l s t r syscall l i $v0 , 10 #c o d i c e d i u s c i t a syscall
  13. 13. MIPS & SPIM Introduzione a SPIMEsempi (2/4) Example (Lettura e stampa di un intero) .data s t r 1 : . a s c i i z ” I n s e r i s c i un numero : ” s t r 2 : . a s c i i z ” I l numero i n s e r i t o e ’ : ” .text . g l o b l main main : l i $v0 , 4 #c o d i c e p e r p r i n t s t r i n g l a $a0 , s t r 1 syscall l i $v0 , 5 #c o d i c e p e r r e a d i n t syscall move $s0 , $v0 #m e m ori z z o i l numero i n $ s 0 l i $v0 , 4 l a $a0 , s t r 2 syscall l i $v0 , 1 #c o d i c e p e r p r i n t i n t move $a0 , $ s 0 syscall l i $v0 , 10 #c o d i c e d i u s c i t a syscall
  14. 14. MIPS & SPIM Introduzione a SPIMEsempi (3/4) Example (Lettura e stampa di una stringa) .data s t r : . s p a c e 10 #a l l o c a 10 b y t e s l i b e r i ( b u f f e r −a r r a y ) .text . g l o b l main main : l a $a0 , s t r #$a0 = b u f f e r l i $a1 , 10 #$a1 = l e n g t h l i $v0 , 8 #c o d i c e p e r r e a d s t r i n g syscall l i $v0 , 4 #c o d i c e p e r p r i n t s t r i n g syscall #i n $a0 c ’ e ’ a n c o r a s t r l i $v0 , 1 0 #c o d i c e d i u s c i t a syscall
  15. 15. MIPS & SPIM Introduzione a SPIMEsempi (4/4) Example (Indirizzo e valore) .data val : . w o r d 0xA #10 ch : .asciiz ” ” .text . g l o b l main main : l a $a0 , v a l #c a r i c a i n $a0 l ’ i n d i r i z z o d i v a l l i $v0 , 1 syscall #stampa l ’ i n d i r i z z o d i v a l o r e l a $a0 , ch #c a r i c a i n $a0 i l c a r a t t e r e ” ” l i $v0 , 4 #e l o stampa syscall l w $a0 , v a l #c a r i c a i n $a0 il contenuto di val l i $v0 , 1 #e l o stampa syscall l i $v0 , 1 0 #c o d i c e d i u s c i t a syscall
  16. 16. MIPS & SPIM EserciziRiepilogo 1 Introduzione a SPIM 2 Esercizi Correzione esercizi Homeworks
  17. 17. MIPS & SPIM Esercizi Correzione eserciziRiepilogo 1 Introduzione a SPIM 2 Esercizi Correzione esercizi Homeworks
  18. 18. MIPS & SPIM Esercizi Correzione eserciziPotenza iterativa (1/4) 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 ; } }
  19. 19. MIPS & SPIM Esercizi Correzione eserciziPotenza iterativa (2/4) .data A: . w o r d 0xA #a=10 B: . w o r d 0 x3 #b=3 str1 : .asciiz ” alla ” str2 : .asciiz ” = ” str3 : . a s c i i z ” n” .text . g l o b l main main : l i $v0 , 0 #( r i t o r n a 0 ) lw $a0 , B #C a r i c o B i n $a0 b l t z $a0 , p r i n t #B < 0 −> p r i n t lw $a1 , A #C a r i c o A i n $a1 b l e z $a1 , p r i n t #A < 1 (A<=0)−> p r i n t l i $v0 , 1 #v0 = 1 for : ... Listing 1: Potenza iterativa in MIPS - Parte1
  20. 20. MIPS & SPIM Esercizi Correzione eserciziPotenza iterativa (3/4) for : beq $a0 , $0 , p r i n t #B==0 −> end f o r mul $v0 , $v0 , $a1 #v0 = v0 ∗A subu $a0 , $a0 , 1 #B=B−1 j for print : move $t1 , $v0 #t 1=v0 lw $a0 , A l i $v0 , 1 #s y s t e m c a l l code p e r p r i n t i n t syscall #”A” l a $a0 , s t r 1 l i $v0 , 4 #s y s t e m c a l l code p e r p r i n t s t r syscall #”A a l l a ” lw $a0 , B l i $v0 , 1 syscall #”A a l l a B” ... Listing 2: Potenza iterativa in MIPS - Parte2
  21. 21. MIPS & SPIM Esercizi Correzione eserciziPotenza iterativa (4/4) ... l a $a0 , s t r 2 l i $v0 , 4 syscall #”A a l l a B = ” move $a0 , $ t 1 #v0=t 1 l i $v0 , 1 syscall #”A a l l a B = AˆB” l a $a0 , s t r 3 l i $v0 , 4 syscall #”A a l l a B = AˆB n” l i $v0 , 1 0 #c o d i c e d i u s c i t a syscall Listing 3: Potenza iterativa in MIPS - Parte3
  22. 22. MIPS & SPIM Esercizi Correzione eserciziPotenza ricorsiva (1/4) 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 ; }
  23. 23. MIPS & SPIM Esercizi Correzione eserciziPotenza ricorsiva (2/4) .data ... .text . g l o b l main main : l i $v0 , 0 #( r i t o r n a 0) lw $a0 , B #C a r i c o B i n $a0 b l t z $a0 , p r i n t #B < 0 −> print lw $t0 , A #C a r i c o A i n $t0 l i $t1 , 1 b l e z $t0 , p r i n t #A < 1 (A<=0)−> p r i n t j a l pow #Chiama l a f u n z i o n e pow print : . . . Listing 4: Potenza ricorsiva in MIPS - Parte1
  24. 24. MIPS & SPIM Esercizi Correzione eserciziPotenza ricorsiva (3/4) .text pow : subu $sp , $sp , 3 2 #S t a c k f r a m e d i 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 frame p o i n t e r sw $a0 , 0 ( $ f p ) #S a l v a l ’ argomento B lw $v0 , 0 ( $ f p ) #C a r i c a B b g t z $v0 , $L2 #B>0 −> 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 Listing 5: Potenza ricorsiva in MIPS - Parte2
  25. 25. MIPS & SPIM Esercizi Correzione eserciziPotenza ricorsiva (4/4) $L2 : lw $v1 , 0 ( $ f p ) #C a r i c a B subu $v0 , $v1 , 1 #C a l c o l a B − 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 pow #Chiama pow lw $v1 , A #C a r i c a A mul $v0 , $v0 , $v1 #C a l c o l a pow (A , B−1) ∗ A $L1 : 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 . c o n t r o l l o a l c a l l e r Listing 6: Potenza ricorsiva in MIPS - Parte3
  26. 26. MIPS & SPIM Esercizi HomeworksRiepilogo 1 Introduzione a SPIM 2 Esercizi Correzione esercizi Homeworks
  27. 27. MIPS & SPIM Esercizi HomeworksAdding machine Adding machine Scrivere e testare un programma MIPS che legge in continuazione un intero e lo somma ai precedenti. Non appena legge uno zero, il programma termina stampando la somma ottenuta fino a tal punto. In altre parole: char c ; i n t somma=0; do{ c=g e t c h a r ( ) ; somma+=a t o i ( c ) ; } w h i l e ( c != ’ 0 ’ ) ; p r i n t f ( ”Somma=%d n” , somma ) ;
  1. ¿Le ha llamado la atención una diapositiva en particular?

    Recortar diapositivas es una manera útil de recopilar información importante para consultarla más tarde.

×