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 di laboratorio n.1 - 29/03/2011

 

1. Realizzare in Assembly MIPS il seguente  codice C:

 

 int a,b,c,d,e,f,g,h;

 

 a=5; b=7;

 c=12; d=-4;

 

 e=(a+b)-(c+d);

 f=(a-b)+(c-d);

 

 g=e; e=f; f=g;

 

 a=e/4; b=f/16; d=d/8;

 c=(e+f)/(2^a);

/* 2^a è un abuso di notazione */


 

2. Scrivere le istruzioni per caricare nel registro 

     $t0 una costante a 32 bit e nel registro $t1

     la word ottenuta invertendo la half word alta e 

     la half word  bassa di $t0 (esempio: se $t0 contiene 

     0x1A45B32D, $t1 dovrà contenere  0xB32D1A45)

 

3.  Scrivere un programma in Assembly MIPS che conti il  numero di bit pari a 1 presenti in una word definita come costante nel segmento .data

Si consideri a titolo di riferimento il seguente  codice C:

 

 unsigned int a=0x2afe3284;

 

void main()

{

   unsigned int mask=1;

   int count=0;

   unsigned int res;


   while (a!=0)

  {
     res = a & mask;
     if (res!=0)
       count++;

     a = a>>1;
  }

}

 

Nota 1

Il costrutto 

while (cond)
{
    blocco
}

si può rendere in Assembly combinando salti condizionati e incondizionati:

ciclo:        if(!cond) goto endciclo

              blocco

              goto ciclo

endciclo:    

Nota 2

Una volta realizzato il codice in Assembly secondo quanto specificato dal codice C sopra, verificare se e come è possibile realizzare il programma in modo più efficiente.

   
 

   

 

 


Home page del corso

© 2011 Francesco Tortorella.
Ultimo aggiornamento: 28/03/2011.