1 / 14

SPIM

SPIM. Esercizi. Esercizio 1 – il comando ‘li’. Il codice deve eseguire una singola operazione: mettere il valore immediato 1023 nel registro s3. Esercizio 2 – operatori aritmetici. Il codice deve: mettere un valore immediato in s0 e uno in s1 sommare s0 e s1 e mettere il risultato in s2

oded
Download Presentation

SPIM

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. SPIM Esercizi

  2. Esercizio 1 – il comando ‘li’ • Il codice deve eseguire una singola operazione: • mettere il valore immediato 1023 nel registro s3.

  3. Esercizio 2 – operatori aritmetici Il codice deve: • mettere un valore immediato in s0 e uno in s1 • sommare s0 e s1 e mettere il risultato in s2 • sommare il valore di s3 ad un numero a vostra scelta e metterne il risultato in s4 • sottrarre il valore di s3 ad s1 e mettere il risultato in s5 • mettere in s6 il risultato della moltiplicazione di s0 per s1

  4. Esercizio 3 – operatori logici Il codice deve: • mettere un valore immediato in s0 e uno in s1 • mettere il risultato dell'AND logico di s0 e s1 in s2 • mettere il risultato dell'AND logico di s0 e un valore immediato (16 bit) in s3 • mettere il risultato dell’OR logico di s0 e s1 in s4 • mettere il risultato dell’OR logico di s0 e un valore immediato (16 bit) in s5

  5. Esercizio 4 – Operazioni di comparazione Il codice deve: • mettere un valore immediato in s0 e uno in s1 • comparare s0 e s1 e mettere il risultato (1 se s0<s1) in s2 • comparare s0 e un valore immediato e mettere il risultato (1 se s0<val.imm.) in s3 • comparare s0 e s1 e mettere il risultato (1 se s0=s1) in s4 • comparare s0 e s1 e mettere il risultato (1 se s0>s1) in s5

  6. Esercizio 5 – branch & jump Il codice deve: • mettere dei valori immediati in s0 e s1, • saltare a 'maggiore‘ se s0>s1 • saltare a 'minore‘ se s0<s1 • saltare a 'uguale‘ se s0=s1 • saltare incondizionatamente a 'fine' • le porzioni di codice definite da queste ultime etichette devono: • maggiore - mettere il valore immediato 1 in s2, saltare inc. a 'fine' • minore - mettere il valore immediato 2 in s2, saltare inc. a 'fine' • uguale - mettere il valore immediato 0 in s2, saltare inc. a 'fine' • fine - eseguire un nop (deve essere l'ultima etichetta) • provare a cambiare i valori di s0 e s1 per verificare la corretta esecuzione del programma

  7. Esercizio 6 – la, lw e la gestione della memoria Il codice deve: • allocare in memoria tre interi: i primi due direttamente nel codice (.word) definiti da altrettante etichette (es. parametro_0 ecc), il terzo utilizzando i menù di PCSPIM • mettere in t0 il valore immediato 4 • mettere in s0 il valore immediato 0x10010000 • con il comando ‘la’: • mettere in s1 l'indirizzo 0x10010004 • mettere in s2 l'indirizzo ($s0) • mettere in s3 l'indirizzo 4($s0) • mettere in s4 l'indirizzo del parametro_1 • mettere in s5 l'indirizzo del parametro_0 + 4 • mettere in s6 l'indirizzo del parametro_0 + 4 ($t0) • con il comando ‘lw’ eseguire le stesse operazioni di ‘la’ (ma al posto dell'indirizzo questa volta avremo il dato contenuto a quell'indirizzo) • eseguire le istruzioni passo per passo per verificare la corretta esecuzione del programma

  8. Esercizio 7 – store Il codice deve: • Inserire in memoria la word 0x0045205a • Leggere questo dato e inserirlo in s0 • Sommarci 5 • Salvare il risultato in memoria all’indirizzo 0x10010004

  9. Esercizio 8 – L’istruzione mancante • Dato il seguente codice, inserire l’istruzione mancante perché alla fine nel registro t0 ci sia il valore 0x1a: .globl __start # il punto di partenza del programma deve essere "globale" .data # dichiarazione di inizio area dati utente, # per convenzione 0x10010000 .word 0x0000001a .text __start: li $s0, 0x3 li $t0, 0x2 lw $s1, 0x10010000 ciclo: mul $s2, $s0, $t0 addi $t0, $s2,2 xxxxxxxxxxxxxxx

  10. Esercizio 9 – Data movement Il codice deve: • inserire nel registro $s0 un valore immediato • spostare il contenuto di $s0 in $s1 • inserire nel registro $s2 un valore immediato • dividere $s1 per $s0 • spostare il resto dell'operazione in $s3

  11. Esercizio 10 – Il codice macchina • Tradurre manualmente in codice macchina le seguenti istruzioni: • add $s2,$s0,$s1 • addi $s1,$s0,46 • sw $s1, 0x10010000

  12. Esercizio 11 – Il codice macchina • Dire cosa fanno le seguenti istruzioni: • 0x2230002b • 0x1211ffff

  13. Esercizio 12 – Allocazione in memoria • Memorizzare una matrice 4x3 nel data segment • Calcolare la somma di ogni colonna • Salvare i risultati in un vettore nel data segment

  14. Esercizio 13 – I cicli Il codice deve: • Dichiarare un array di 20 numeri interi (word) nel data segment • In un ciclo inizializzare i valori con i primi 20 numeri dispari (iniziando da 1)

More Related