Esercizio Assembler
La seguente matrice rappresenta il Triangolo di Tartaglia:
1 |
1 |
1 |
1 |
1 |
1 |
1 |
2 |
3 |
4 |
5 |
6 |
1 |
3 |
6 |
10 |
15 |
.. |
1 |
4 |
10 |
20 |
.. |
.. |
1 |
5 |
15 |
.. |
.. |
.. |
1 |
6 |
.. |
.. |
.. |
252 |
Tutti gli elementi della prima riga e della prima colonna sono uguali a 1, cioč:
- m(1,j)=1 per ogni valore di j
- m(i,1)=1 per ogni valore di i
Il generico elemento m(i,j) - cioč l'elemento a riga i e colonna j - č dato da:
m(i,j) = m(i-1,j)---+ m(i,j-1)
Esempio: m(3,4) = m(3,3)---+ m(2,4) = 6 + 4 = 10
Scrivere un programma Assembler SPIM che:
- definisce una zona di memoria di nome MATRICE di half-words, la cui dimensione massima č 10x10;
- chiede il numero di righe e colonne (numero righe = numero colonne) da console;
- calcola ogni elemento della matrice tramite la subroutine ricorsiva di nome TART(i,j) tale che:
-
- riceve in input gli indici i e j
- fornisce in output il valore:
-
- 1 se i =1 oppure j=1
- TART(i-1,j)---+ TART(i,j-1) altrimenti
Si noti che utilizzando una subroutine ricorsiva l'elemento m(2,3) viene calcolato come:
m(2,3)= m(1,3)---+ m(2,2) = 1 + m(1,2) + m(2,1) = 1 + 1 + 1 = 1 + 2 = 3
- costruisce una seconda matrice di nome MAT2 di bytes, della stessa dimensione di MATRICE, in cui ogni elemento MAT2(i,j) assume come valore:
-
- la somma dei due bytes che costituiscono il valore dell'elemento MATRICE(i,j) se tale somma č minore di 255 (cioč se tale somma e' rappresentabile con un byte);
- il valore assoluto della differenza dei due bytes che costituiscono il valore dell'elemento MATRICE(i,j) altrimenti;
- stampi su console le due matrici MATRICE e MAT2 per righe.
--
AnnalisaMassini - 02 Apr 2001