Progetti MIPS - Nicola Paoletti

annuncio pubblicitario
Progetto MIPS/SPIM
Descrizione
Questa tipologia di progetto consiste in



Sviluppare un programma in linguaggio MIPS assembly
Simulare il programma in QtSPIM
Preparare una relazione del progetto (max 20 pagine)
Inoltre,


Si può presentare il progetto individualmente o in coppie
Al momento dell’esame, occorre presentare una copia cartacea della relazione e una copia digitale
(CD o DVD, comprensiva di codice)
Infine,


Lo studente potrà scegliere tra i progetti presenti in questo documento, oppure proporre progetti
differenti. Nel secondo caso, il Professore valuterà la coerenza e la fattibilità della proposta.
In ogni caso, il progetto scelto va comunicato al Prof. Leonardo Pasini via mail
([email protected]), mettendo in cc anche il sottoscritto ([email protected] )
Nella pagina seguente, sono elencati alcuni progetti disponibili e un template esemplificativo per la
relazione.
Lista dei progetti disponibili
Progetto 1 - Primalità
Implementare una procedura in MIPS per calcolare e stampare i primi 100 numeri primi.
Un naturale n>1 è detto primo se è divisibile solo per sè stesso e per 1.
Suggerimento:
Implementate due routine:
 test_prime (n): ritorna 1 se n è primo; 0 altrimenti
 main (): cicla sui naturali, testando se ogni numero è primo. Stampa i primi 100 numeri primi e si
ferma.
Progetto 2 – Calcolo del pi-greco
Implementare una procedura in MIPS per calcolare e stampare un valore approssimato del pi-greco.
Il metodo da utilizzare è quello del prodotto di Wallis: (http://it.wikipedia.org/wiki/Prodotto_di_Wallis).
Prodotto di Wallis:
Suggerimenti:
 Trasformare l’espressione del prodotto di Wallis in modo tale da minimizzare le operazioni
aritmetiche
 Basta un numero limitato di iterazioni. 100 sono sufficienti.
 Naturalmente avrete bisogno di utilizzare i registri floating-point
Progetto 3 – Bubble sort
Implementare una procedura in MIPS che esegue l’algoritmo di ordinamento noto come Bubble sort.
Il programma dovrà prendere in input un’array di interi (prendendo prima la lunghezza dell’array e quindi
l’inserimento dei valori) e stampare gli elementi ordinati secondo l’algoritmo indicato.
All’indirizzo http://it.wikipedia.org/wiki/Bubble_sort , potete trovare una descrizione più dettagliata
dell’algoritmo, mentre http://it.wikibooks.org/wiki/Implementazioni_di_algoritmi/Bubble_sort mostra
alcune implementazioni più ad alto livello.
Bubble sort - codice Java:
public void bubbleSort(int[] x)
{
int temp;
int j = x.length-1;
while(j>0)
{
for(int i=0; i<j; i++)
{
//controllo valori adiacenti; scambio se il corrente è > del successivo
if(x[i]>x[i+1]){
//esegue lo scambio
temp=x[i];
x[i]=x[i+1];
x[i+1]=temp;
}
}
j--;
}
}
Progetto 4 – Macchina del caffè
Implementare una procedura in MIPS che simuli una macchina del caffè. Si richiedono le seguenti
interazioni utente-macchina:
 La macchina può erogare coffee o tea.
 L’utente può inserire monete da 5, 10, 20, 50, 100, o 200 centesimi.
 I prezzi delle bevande sono: coffee=35 e tea=40.
 Ad ogni inserimento, il display stampa il credito corrente
 In ogni momento, l’utente può chiedere l’erogazione della bevanda specificando in input “coffee”
o “tea”
 Se il credito non è sufficiente per la bevanda, il display stampa l’importo rimanente da inserire
per la bevanda richiesta
 Una volta inserito un importo adeguato e scelta la bevanda, il display deve indicare che sta
erogando la bevuta
 In qualsiasi momento, l’utente può richiedere l’importo inserito (o il resto) specificando “quit”. In
tal caso, il display stampa l’importo dovuto e la macchina si spegne.
Progetto 5 – Hex to Dec
Implementare una procedura in MIPS che effettua la conversione di una stringa esadecimale passata in
input in un numero decimale. Si considerano interi esadecimali non segnati. Il programma dovrà stampare
il numero decimale convertito.
Progetto 6 – Dec to Hex
Implementare una procedura in MIPS che effettua la conversione di un numero decimale passato in input
in una stringa esadecimale. Si considerano interi non segnati.
Suggerimenti:
 Si può utilizzare il metodo delle divisioni successive
Progetto 7 – Selection sort
Implementare una procedura in MIPS che esegue l’algoritmo di ordinamento noto come Selection sort.
Il programma dovrà prendere in input un’array di interi (prendendo prima la lunghezza dell’array e quindi
l’inserimento dei valori) e stampare gli elementi ordinati secondo l’algoritmo indicato.
All’indirizzo http://it.wikipedia.org/wiki/Selection_sort , potete trovare una descrizione più dettagliata
dell’algoritmo.
Selection sort - codice Java:
public void selectionSort(int[] x){
int min;
for(int i=0; i<x.length -1; i++){
min=i;
for(int j=1; j<x.length; j++)
if(x[j] < x[min])
min = j;
int temp=x[i];
x[i]=x[min];
x[min]=temp;
}
}
Progetto 8 – Convertitore di temperatura
Implementare una procedura in MIPS che
Conversione da
A
effettua la conversione tra diverse unità di
temperatura (Kelvin, Celsius e Fahrenheit). Il
kelvin
Celsius
programma prende in input un valore di
temperatura e il codice della conversione da
Celsius
kelvin
eseguire, e restituisce la temperatura secondo la
conversione richiesta.
Formula
T(°C) = T(K) - 273,15
T(K) = T(°C) + 273,15
kelvin
Fahrenheit
T(°F) = (T(K) × 1,8) - 459,67
Fahrenheit
kelvin
T(K) = (T(°F) + 459,67) / 1,8
Suggerimenti:
 Avrete bisogno di utilizzare i registri floating-point
Progetto 9 – Massimo comun divisore
Implementare una procedura in MIPS che effettua il calcolo del massimo comun divisore secondo
l’algoritmo di Euclide delle divisioni successive. Il programma prende in input due naturali a e b e
restituisce il loro massimo comun divisore calcolato secondo l’algoritmo qui presentato in Java
MCD Euclide - codice Java:
public void mcd(int a, int b){
//faccio in modo che a>=b, scambiandoli se necessario
if(a<b){
int temp=b;
b=a;
a=temp;
}
int r;
while(b!=0){
r = a%b;
a=b;
b=r;
}
return a;
}
Progetto 10 – Fibonacci
Implementare una procedura in MIPS che effettua il calcolo dei numeri di Fibonacci. Il programma prende
in input un naturale n e restituisce l’n-esimo numero di Fibonacci. Per chi non lo sapesse, i numeri di
Fibonacci sono dati dalla successione:
Fn = Fn-1 + Fn-2
con
F0 = 0 e F1 = 1
Progetto 11 – Logaritmo naturale
Implementare una procedura in MIPS che effettua il calcolo del logaritmo naturale di un dato valore. Il
programma prende in input un numerico n  1 e restituisce il logaritmo naturale di n, calcolato attraverso
lo sviluppo di Taylor, per cui
Suggerimenti:
 Avrete bisogno di utilizzare i registri floating-point
 Non fatevi spaventare dalla forma:
è -1 quando n è pari e 1 quando n è dispari; inoltre
non dovete ogni volta calcolarvi la potenza di x alla n, basta tenere ad ogni passo della serie il
vecchio valore di x e moltiplicarlo per n.
Progetto 12 – Cifrario di Cesare
Implementare una procedura in MIPS che effettua la cifratura di una stringa secondo il cifrario di Cesare.
Il cifrario di Cesare (http://it.wikipedia.org/wiki/Cifrario_di_Cesare) codifica una stringa in input
spostando ogni carattere dell’alfabeto di un offset (esempio: con offset=3 la stringa “ABC”, diventa “DEF”).
La procedura prende in input un offset e una stringa e restituisce in output la stringa codificata.
Progetto 13 – Media e varianza
Implementare una procedura in MIPS che effettua il calcolo di media e varianza di un dato array di interi
(un campione di osservazioni). La procedura prende in input un array di interi, le osservazioni, (prendendo
prima la lunghezza dell’array e quindi l’inserimento dei valori) e stampa la loro media e varianza.
Ricordiamo che la media di un campione di osservazioni x è
e che la varianza di un campione di osservazioni è
Suggerimenti:
 Avrete bisogno di utilizzare i registri floating-point
NOME PROGETTO
Progetto di Architettura degli Elaboratori – Prof. Leonardo Pasini
Corso di Laurea in Informatica – Scuola di Scienze e Tecnologie – Università di Camerino
Anno Accademico: 2011/2012
Candidati:
Candidato 1 – Matricola n. 1
Candidato 2 – Matricola n. 2
...
Specifica del problema
Descrivere il problema da risolvere. La lunghezza di questa parte dipende naturalmente dal progetto scelto.
Descrizione dell’algoritmo
Descrivere in modo dettagliato e più formale l’algoritmo da implementare. In questa parte, si consiglia di
inserire lo pseudocodice dell’algoritmo e la sua codifica in un linguaggio ad alto livello a scelta (C, Java, ...).
Si spieghino e si giustifichino in modo dettagliato le scelte adottate.
Implementazione
In questa parte va aggiunto il codice MIPS assembly implementato e commentato in modo chiaro ed
esauriente. Sono consigliati commenti all’interno del codice, e commenti più ampi nella relazione.
Simulazione
In questa sezione andranno gli screenshot commentati di una simulazione-tipo.
Scarica