Esercizio A
Scrivere un programma in Assembly MIPS
che legga da input una stringa di max 63 caratteri e salvati in uno spazio opportunamente allocato nel segmento
.data.
Il programma costruisca poi una nuova stringa (anch'essa da
memorizzare nel segmento .data)
ottenuta convertendo in maiuscolo i caratteri alfabetici minuscoli e
lasciando inalterati gli altri.
Si consideri a titolo di
riferimento il
seguente codice C:
char
string1[64];
char string2[64];
void main()
{
int i;
cout << "Stringa: ";
cin >> string1;
while(string1[i] != '\0')
{
if((string1[i] >= 'a')
&& (string1[i] <= 'z'))
string2[i]=string1[i]-'a'+'A';
else
string2[i]=string1[i];
i++;
}
string2[i]='\0';
cout << "Stringa in maiuscolo: "
<< string2;
cout << "\n";
}
Nota:
E' possibile caricare il codice ASCII di un carattere in un registro considerando il carattere come costante.
Esempio:
li $t0,'a' carica il valore 97 (codice ASCII di 'a') nel registro $t0.
Esercizio B
Scrivere un programma in Assembly MIPS
che legga da input gli elementi di un array di interi signed,
salvandoli in uno spazio opportunamente allocato nel segmento
.data.
Il programma determini quindi l'indice del primo elemento negativo
presente nell'array.
Si consideri a titolo di
riferimento il
seguente codice C:
int vet[128];
int riemp;
void main()
{
int pos;
leggi_vet(vet,riemp);
trova_neg(vet,riemp,pos);
cout << "Posizione primo el. negativo:
<< pos;
cout << "\n";
}
void leggi_vet(int v[],int &n)
{
int x;
cout << "Numero elementi: ";
cin >> n;
for(i=0;i<n;i++)
{
cout << "Elemento
" << i <<": ";
cin >> x;
vet[i]=x;
}
}
void trova_neg(int v[],int n,int &p)
{
int i,int x;
i=0;
while(i<n)
{
if(v[i]<0)
{
p=i;
break;
}
i++;
}
}
|