lezione3 - mips & spim unicam

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

Upload: nicola-paoletti

Post on 08-Jul-2015

935 views

Category:

Spiritual


1 download

TRANSCRIPT

Page 1: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

MIPS & SPIMModulo del Corso di Architettura degli Elaboratori

Nicola Paoletti

Universita di CamerinoScuola di Scienze e Tecnologie

5 Aprile 2011AA 2010/2011

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

Page 3: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

Riepilogo

1 Codifica istruzioni MIPSFormati di istruzioneR-formatI-formatJ-format

Page 4: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

Come traduciamo un’istruzione in linguaggio macchina?

Tre tipi di formati (32 bit):

Formato R-type: per le istruzioni del tipo add, sub, mul, div,

and, or, . . . (R-format: Registry-format)

Formato I-type: per le istruzioni del tipo addi, lw, sw, . . .

(I-format: Immediate-format)

Formato J-type: per le istruzioni di jump (J-format:Jump-format)

Page 5: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

Formati di istruzione

Riepilogo

1 Codifica istruzioni MIPSFormati di istruzioneR-formatI-formatJ-format

Page 6: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

Formati di istruzione

R-format

op rs rt rd shamt funct

6 bit 5 bit 5 bit 5 bit 5 bit 6 bit

op: opcode

rs: primo registro sorgente

rt: primo registro sorgente

rd: registro di destinazione

shamt: shift amount; =0 se non si tratta di un’istruzione dishift

funct: funzione; i campi op e funct identificano la particolarefunzione da eseguire.

Page 7: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

Formati di istruzione

I-format (1/2)

op rs rt address

6 bit 5 bit 5 bit 16 bit

In questo caso solo opcode identifica l’istruzione mnemonica.

Si hanno 16 bit per indirizzare la memoria fisica.

Page 8: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

Formati di istruzione

I-format (2/2)

Domanda:Ricordandoci che la memoria e indirizzata byte per byte, con 16 bitper specificare l’indirizzo,qual’e l’intervallo a cui possiamo accedere?

Page 9: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

Formati di istruzione

I-format (2/2)

Domanda:Ricordandoci che la memoria e indirizzata byte per byte, con 16 bitper specificare l’indirizzo,qual’e l’intervallo a cui possiamo accedere?Dato un offset $s, dal byte $s al byte 216 − 1+ $s.

Page 10: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

Formati di istruzione

J-format

op address

6 bit 26 bit

Address specifica l’indirizzo dell’istruzione a cui saltare.

Page 11: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

Formati di istruzione

Una vista d’insieme

Type Format(Bits)

R opcode(6) rs(5) rt(5) rd(5) shamt(5) funct(6)

I opcode(6) rs(5) rt(5) immediate(16)

J opcode(6) address(26)

Page 12: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

Formati di istruzione

noop

noop

Alto livello:Assembly: noop

Macchina: 0x0

Page 13: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

R-format

Riepilogo

1 Codifica istruzioni MIPSFormati di istruzioneR-formatI-formatJ-format

Page 14: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

R-format

Addition

add

Alto livello: $d = $s + $t

Assembly: add $d, $s, $t

Macchina: 0x0 $s $t $d 0x0 0x20

Page 15: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

R-format

Subtraction

sub

Alto livello: $d = $s - $t

Assembly: sub $d, $s, $t

Macchina: 0x0 $s $t $d 0x0 0x22

Page 16: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

R-format

Multiplication

mult

Alto livello: $LO = (($s * $t) << 32)>>32

$HI = ($s * $t)>>32

Assembly: mult $s, $t

Macchina: 0x0 $s $t 0x0 0x0 0x18

Moltiplica il contenuto dei due registri a 32 bit ($s e $t). Ilrisultato (64 bit) viene messo in due registri speciali:

$LO: contiene i 32 bit meno significativi del risultato; sirecupera attraverso l’istruzione mflo $s.

$HI: contiene i 32 bit piu significativi del risultato; si recuperaattraverso l’istruzione mfhi $s.

Page 17: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

R-format

Bitwise and

and

Alto livello: $d = $s & $t

Assembly: and $d, $s, $t

Macchina: 0x0 $s $t $d 0x0 0x24

Page 18: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

R-format

Bitwise or

or

Alto livello: $d = $s | $t

Assembly: or $d, $s, $t

Macchina: 0x0 $s $t $d 0x0 0x25

Page 19: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

R-format

Exclusive or

xor

Alto livello: $d = $s ^ $t

Assembly: xor $d, $s, $t

Macchina: 0x0 $s $t $d 0x0 0x26

Page 20: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

R-format

Set on less than

slt

Alto livello: $d=($s < $t)

Assembly: slt $d, $s, $t

Macchina: 0x0 $s $t $d 0x0 0x2A

Page 21: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

I-format

Riepilogo

1 Codifica istruzioni MIPSFormati di istruzioneR-formatI-formatJ-format

Page 22: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

I-format

Add immediate

addi

Alto livello: $t = $s + C

Assembly: addi $t, $s, C

Macchina: 0x8 $s $t C

Page 23: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

I-format

Load word (1/2)

lw

Alto livello: $t = MEM[$s + offset]

Assembly: lw $t, offset($s)

Macchina: 0x23 $s $t $s + offset

Attenzione:

La memoria e indirizzata al singolo byte

Le word hanno lunghezza 32 bit = 4 byte

Il valore di $s e un multiplo di 4.

Page 24: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

I-format

Load word (1/2)

lw

Alto livello: $t = MEM[$s + offset]

Assembly: lw $t, offset($s)

Macchina: 0x23 $s $t $s + offset

Attenzione:

La memoria e indirizzata al singolo byte

Le word hanno lunghezza 32 bit = 4 byte

Il valore di $s e un multiplo di 4.

Page 25: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

I-format

Load word (1/2)

lw

Alto livello: $t = MEM[$s + offset]

Assembly: lw $t, offset($s)

Macchina: 0x23 $s $t $s + offset

Attenzione:

La memoria e indirizzata al singolo byte

Le word hanno lunghezza 32 bit = 4 byte

Il valore di $s e un multiplo di 4.

Page 26: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

I-format

Load word (1/2)

lw

Alto livello: $t = MEM[$s + offset]

Assembly: lw $t, offset($s)

Macchina: 0x23 $s $t $s + offset

Attenzione:

La memoria e indirizzata al singolo byte

Le word hanno lunghezza 32 bit = 4 byte

Il valore di $s e un multiplo di 4.

Page 27: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

I-format

Load word (2/2)

Example

Codice MIPS per caricare in $t la sesta word in memoria, conoffset=0xBAC014

Page 28: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

I-format

Load word (2/2)

Example

Codice MIPS per caricare in $t la sesta word in memoria, conoffset=0xBAC014

addi $s, $0, 24

lw $t, 0xBAC014($s)

Page 29: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

I-format

Store word

sw

Alto livello: MEM[$s + offset] = $t

Assembly: sw $t, offset($s)

Macchina: 0x2B $s $t $s + offset

Example

Codice MIPS per scrivere nella settima word in memoria conoffset=0xBAC014 il valore di $t

Page 30: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

I-format

Store word

sw

Alto livello: MEM[$s + offset] = $t

Assembly: sw $t, offset($s)

Macchina: 0x2B $s $t $s + offset

Example

Codice MIPS per scrivere nella settima word in memoria conoffset=0xBAC014 il valore di $t

addi $s, $0, 28

sw $t, 0xBAC014($s)

Page 31: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

I-format

Branch on equal

beq

Alto livello: if ($s == $t) goto C

Assembly: beq $s,$t, C

Macchina: 0x4 $s $t C

Example

# se $s1 e uguale a $s2, li sottraggo; altrimenti li

sommo.

beq $s1, $s2, L1

add $t1, $s1, $s2

L1: sub $t1, $s1, $s2

Page 32: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

I-format

Branch on not equal

bne

Alto livello: if ($s != $t) goto C

Assembly: bne $s,$t, C

Macchina: 0x5 $s $t C

Example

# se $s1 e diverso a $s2, li sommo; altrimenti li

sottraggo.

bne $s1, $s2, L1

sub $t1, $s1, $s2

L1: add $t1, $s1, $s2

Page 33: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

J-format

Riepilogo

1 Codifica istruzioni MIPSFormati di istruzioneR-formatI-formatJ-format

Page 34: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

J-format

Unconditional jump

jump

Alto livello: goto C

Assembly: j C

Macchina: 0x2 C

Example

# goto L1

j L1

...

L1: ...

Page 35: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

J-format

Esercizi (1/2)

Massimo

Scrivere una procedura MIPS per il possibile codice dell’istruzionemax $v0, $a0, $a1.

Page 36: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

J-format

Esercizi (1/2)

Massimo

Scrivere una procedura MIPS per il possibile codice dell’istruzionemax $v0, $a0, $a1.

slt $t0, $a0, $a1

beq $t0, $0, L1

addi $v0, $a1, 0

L1: addi $v0, $a0, 0

Page 37: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

J-format

Esercizi (2/2)

Minimo

Scrivere una procedura MIPS per il possibile codice dell’istruzionemin $v0, $a0, $a1.

Page 38: Lezione3 - MIPS & SPIM Unicam

MIPS & SPIM

Codifica istruzioni MIPS

J-format

Esercizi (2/2)

Minimo

Scrivere una procedura MIPS per il possibile codice dell’istruzionemin $v0, $a0, $a1.

slt $t0, $a0, $a1

beq $t0, $0, L1

addi $v0, $a0, 0

L1: addi $v0, $a1, 0