Lezione5 - MIPS & SPIM Unicam

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

Transcript of Lezione5 - MIPS & SPIM Unicam

Page 1: Lezione5 - MIPS & SPIM Unicam

MIPS & SPIM

MIPS & SPIMModulo del Corso di Architettura degli Elaboratori

Nicola Paoletti

Universita di Camerino

Scuola di Scienze e Tecnologie

27 Aprile 2011AA 2010/2011

Page 2: Lezione5 - 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).

Lezione 4: Organizzazione della memoria, stack frame;chiamate a procedura (esempio fattoriale); direttive.

Page 3: Lezione5 - MIPS & SPIM Unicam

MIPS & SPIM

Introduzione a SPIM

Riepilogo

1 Introduzione a SPIM

2 EserciziCorrezione eserciziHomeworks

Page 4: Lezione5 - MIPS & SPIM Unicam

MIPS & SPIM

Introduzione a SPIM

Il tool SPIM

SPIM e un simulatore open source per programmi assemblyMIPS32

Naturalmente, non esegue programmi binari (compilati)!

La nuova versione - QtSPIM - e disponibile all’indirizzohttps://sourceforge.net/projects/spimsimulator/files/;supporta Windows - MacOSX - Linux(solo 32bit); per chi haLinux a 64 bit si puo:

compilare i sorgenti, oppureemulare la versione Windows con Wine

La vecchia pagina del simulatore in cui e possibile trovareulteriore materiale e all’indirizzohttp://pages.cs.wisc.edu/~larus/spim.html

Page 5: Lezione5 - MIPS & SPIM Unicam

MIPS & SPIM

Introduzione a SPIM

QtSPIM - GUI (1/2)

Registri interi Segmento di testo

Page 6: Lezione5 - MIPS & SPIM Unicam

MIPS & SPIM

Introduzione a SPIM

QtSPIM - GUI (2/2)

Registri floating point Segmento dati

Page 7: Lezione5 - MIPS & SPIM Unicam

MIPS & SPIM

Introduzione a SPIM

QtSPIM - Alcune Feature

Implementa quasi completamente il MIPS32 instruction set

Esecuzione/Esecuzione step-by-step/Debug

System calls

Page 8: Lezione5 - MIPS & SPIM Unicam

MIPS & SPIM

Introduzione a SPIM

SPIM - Sintassi

Codice commentato con #

Gli identificativi sono nel formato[a-zA-Z. ][a-zA-Z0-9. ]∗

Gli opcode delle istruzioni non possono essere messi comeidentificativi

label:

I numeri sono di default in base 10; valori hex indicati con 0xN

Le stringhe sono delimitate da “”

Page 9: Lezione5 - MIPS & SPIM Unicam

MIPS & SPIM

Introduzione a SPIM

SPIM - 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 systemcall code

Example (Exit service)

li $v0, 10

syscall # esce dalla procedura

Page 10: Lezione5 - MIPS & SPIM Unicam

MIPS & SPIM

Introduzione a SPIM

SPIM - 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

Page 11: Lezione5 - MIPS & SPIM Unicam

MIPS & SPIM

Introduzione a SPIM

SPIM - System Call (3/3)

Service Code Arguments Result

print character 11 $a0 = character

read character 12 character (in $v0)

open 13 $a0 = filename, $a1 =flags, $a2 = mode

file descriptor (in $v0)

read 14 $a0 = file descriptor, $a1= buffer, $a2 = count

bytes read (in $v0)

write 15 $a0 = file descriptor, $a1= buffer, $a2 = count

bytes written (in $v0)

close 16 $a0 = file descriptor 0 (in $v0)

exit2 17 $a0 = result

Page 12: Lezione5 - MIPS & SPIM Unicam

MIPS & SPIM

Introduzione a SPIM

Esempi (1/4)

Example (Hello world!)

.data

s t r : . a s c i i z ” He l l o World ! ” #s t r i n g a d i c a r a t t e r i

. t e x t

. g l o b l main

main :l i $v0 , 4 #cod i c e pe r p r i n t s t r i n gl 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 rs y s c a l ll i $v0 , 10 #cod i c e d i u s c i t as y s c a l l

Page 13: Lezione5 - MIPS & SPIM Unicam

MIPS & SPIM

Introduzione a SPIM

Esempi (2/4)

Example (Lettura e stampa di un intero)

. da ta

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 ’ : ”

. t e x t

. g l o b l main

main :l i $v0 , 4 #c od i c e pe r p r i n t s t r i n gl a $a0 , s t r 1s y s c a l ll i $v0 , 5 #c od i c e pe r r e a d i n ts y s c a l lmove $s0 , $v0 #memorizzo i l numero i n $s0l i $v0 , 4l a $a0 , s t r 2s y s c a l ll i $v0 , 1 #c od i c e pe r p r i n t i n tmove $a0 , $s0s y s c a l ll i $v0 , 10 #c od i c e d i u s c i t as y s c a l l

Page 14: Lezione5 - MIPS & SPIM Unicam

MIPS & SPIM

Introduzione a SPIM

Esempi (3/4)

Example (Lettura e stampa di una stringa)

. da ta

s t r : . s p a c e 10 #a l l o c a 10 byt e s l i b e r i ( b u f f e r−a r r a y )

. t e x t

. g l o b l main

main :l a $a0 , s t r #$a0 = b u f f e rl i $a1 , 10 #$a1 = l ength

l i $v0 , 8 #c od i c e pe r r e a d s t r i n gs y s c a l ll i $v0 , 4 #c od i c e pe r p r i n t s t r i n gs y s c a l l #i n $a0 c ’ e ’ ancora s t rl i $v0 , 10 #c od i c e d i u s c i t as y s c a l l

Page 15: Lezione5 - MIPS & SPIM Unicam

MIPS & SPIM

Introduzione a SPIM

Esempi (4/4)

Example (Indirizzo e valore)

. da ta

v a l : .word 0xA #10ch : . a s c i i z ” ”

. t e x t

. g l o b l mainmain :

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 ll i $v0 , 1s y s c a l l #stampa l ’ i n d i r i z z o d i v a l o r el 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 stampas y s c a l llw $a0 , v a l #c a r i c a i n $a0 i l c on t enuto d i v a ll i $v0 , 1 #e l o stampas y s c a l ll i $v0 , 10 #c od i c e d i u s c i t as y s c a l l

Page 16: Lezione5 - MIPS & SPIM Unicam

MIPS & SPIM

Esercizi

Riepilogo

1 Introduzione a SPIM

2 EserciziCorrezione eserciziHomeworks

Page 17: Lezione5 - MIPS & SPIM Unicam

MIPS & SPIM

Esercizi

Correzione esercizi

Riepilogo

1 Introduzione a SPIM

2 EserciziCorrezione eserciziHomeworks

Page 18: Lezione5 - MIPS & SPIM Unicam

MIPS & SPIM

Esercizi

Correzione esercizi

Potenza iterativa (1/4)

Potenza iterativa

Scrivere una procedura MIPS che calcola la potenza ab, con

a ∈ 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 19: Lezione5 - MIPS & SPIM Unicam

MIPS & SPIM

Esercizi

Correzione esercizi

Potenza iterativa (2/4)

.data

A: .word 0xA #a=10B : .word 0x3 #b=3s t r 1 : . a s c i i z ” a l l a ”s t r 2 : . a s c i i z ” = ”s t r 3 : . a s c i i z ”\n”

. t e x t

. g l o b l mainmain : l i $v0 , 0 #( r i t o r n a 0)

lw $a0 ,B #Car i co B i n $a0b l t z $a0 , p r i n t #B < 0 −> p r i n tlw $a1 , A #Car i co A i n $a1b l e z $a1 , p r i n t #A < 1 (A<=0)−> p r i n tl i $v0 , 1 #v0 = 1

f o r : . . .

Listing 1: Potenza iterativa in MIPS - Parte1

Page 20: Lezione5 - MIPS & SPIM Unicam

MIPS & SPIM

Esercizi

Correzione esercizi

Potenza iterativa (3/4)

f o r : beq $a0 , $0 , p r i n t #B==0 −> end f o rmul $v0 , $v0 , $a1 #v0 = v0∗Asubu $a0 , $a0 , 1 #B=B−1j f o r

p r i n t : move $t1 , $v0 #t1=v0lw $a0 , Al i $v0 , 1 #system c a l l code pe r p r i n t i n ts y s c a l l #”A”l a $a0 , s t r 1l i $v0 , 4 #system c a l l code pe r p r i n t s t rs y s c a l l #”A a l l a ”lw $a0 , Bl i $v0 , 1s y s c a l l #”A a l l a B”. . .

Listing 2: Potenza iterativa in MIPS - Parte2

Page 21: Lezione5 - MIPS & SPIM Unicam

MIPS & SPIM

Esercizi

Correzione esercizi

Potenza iterativa (4/4)

. . .l a $a0 , s t r 2l i $v0 , 4s y s c a l l #”A a l l a B = ”move $a0 , $t1 #v0=t1l i $v0 , 1s y s c a l l #”A a l l a B = AˆB”l a $a0 , s t r 3l i $v0 , 4s y s c a l l #”A a l l a B = AˆB\n”l i $v0 ,10 #cod i c e d i u s c i t as y s c a l l

Listing 3: Potenza iterativa in MIPS - Parte3

Page 22: Lezione5 - MIPS & SPIM Unicam

MIPS & SPIM

Esercizi

Correzione esercizi

Potenza ricorsiva (1/4)

Potenza ricorsiva

Scrivere una procedura MIPS che calcola la potenza ab, con

a ∈ 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 e

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 ;

}

Page 23: Lezione5 - MIPS & SPIM Unicam

MIPS & SPIM

Esercizi

Correzione esercizi

Potenza ricorsiva (2/4)

.data

. . .

. t e x t

. g l o b l mainmain : l i $v0 , 0 #( r i t o r n a 0)

lw $a0 , B #Car i co B i n $a0b l t z $a0 , p r i n t #B < 0 −> p r i n tlw $t0 , A #Car i co A i n $t0l i $t1 , 1b l e z $t0 , p r i n t #A < 1 (A<=0)−> p r i n tj a l pow #Chiama l a f u n z i on e pow

p r i n t : . . .

Listing 4: Potenza ricorsiva in MIPS - Parte1

Page 24: Lezione5 - MIPS & SPIM Unicam

MIPS & SPIM

Esercizi

Correzione esercizi

Potenza ricorsiva (3/4)

. t e x tpow : subu $sp , $sp ,32 #Stack frame d i 32 b y t e s

sw $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 Blw $v0 , 0 ( $fp ) #Ca r i c a Bbgtz $v0 , $L2 #B>0 −> L2l i $v0 , 1 #a l t r i m e n t i r i t o r n a 1j r $L1

Listing 5: Potenza ricorsiva in MIPS - Parte2

Page 25: Lezione5 - MIPS & SPIM Unicam

MIPS & SPIM

Esercizi

Correzione esercizi

Potenza ricorsiva (4/4)

$L2 : lw $v1 , 0 ( $fp ) #Ca r i c a Bsubu $v0 , $v1 , 1 #Ca l c o l a B − 1move $a0 , $v0 #Sposta i l r i s u l t a t o i n $a0j a l pow #Chiama powlw $v1 ,A #Ca r i c a Amul $v0 , $v0 , $v1 #Ca l c o l a pow(A,B−1) ∗ A

$L1 : lw $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 . c o n t r o l l o a l c a l l e r

Listing 6: Potenza ricorsiva in MIPS - Parte3

Page 26: Lezione5 - MIPS & SPIM Unicam

MIPS & SPIM

Esercizi

Homeworks

Riepilogo

1 Introduzione a SPIM

2 EserciziCorrezione eserciziHomeworks

Page 27: Lezione5 - MIPS & SPIM Unicam

MIPS & SPIM

Esercizi

Homeworks

Adding machine

Adding machine

Scrivere e testare un programma MIPS che legge in continuazioneun intero e lo somma ai precedenti. Non appena legge uno zero, ilprogramma termina stampando la somma ottenuta fino a talpunto. In altre parole:

char c ;i n t somma=0;do{

c=ge t cha r ( ) ;somma+=a t o i ( c ) ;

}wh i l e ( c != ’ 0 ’ ) ;p r i n t f ( ”Somma=%d\n” , somma ) ;