140 likes | 350 Views
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
E N D
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 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
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
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
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, 0x10010000
Esercizio 11 – Il codice macchina • Dire cosa fanno le seguenti istruzioni: • 0x2230002b • 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)