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.
|
|
|
|
|
|
|