Calcolatori Elettronici

  

Universitą degli Studi di Cassino

Corso di Laurea in
Ingegneria Informatica e delle Telecomunicazioni

   prof. Francesco Tortorella  (mail)

     Anno Accademico 2010/2011

     secondo semestre

 


 

 

Esercitazione n. 4 - 21/04/2011


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++;

  }

}

 

 




 
     

 

 


Home page del corso

© 2011 Francesco Tortorella.
Ultimo aggiornamento: 19/4/2011.