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 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
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
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
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
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 0x con il comando ‘la’: mettere in s1 l'indirizzo 0x 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
Esercizio 7 – store Il codice deve: Inserire in memoria la word 0x a Leggere questo dato e inserirlo in s0 Sommarci 5 Salvare il risultato in memoria all’indirizzo 0x
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 0x word0x a.text __start: li $s0, 0x3 li $t0, 0x2 lw $s1, 0x ciclo: mul $s2, $s0, $t0 addi $t0, $s2,2 xxxxxxxxxxxxxxx
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
Esercizio 10 – Il codice macchina Tradurre manualmente in codice macchina le seguenti istruzioni: add $s2,$s0,$s1 addi $s1,$s0,46 sw $s1, 0x
Esercizio 11 – Il codice macchina Dire cosa fanno le seguenti istruzioni: 0x b 0x1211ffff
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
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)