Técnicas de programação em assembly
Exercícios
a)
main ()
{ int a, b, c;
a=0;
b=2;
c=a+b;
}
Resolução
# a em $s0, b em $s1, c em $s2 .text main: li $s0, 0 # a = 0 li $s1, 2 # b = 2 add $s2, $s0, $s1 # c = a + b jr $ra
main ()
{ int a, b, c, d, e;
e = (a+b) - (c+d);
}
main()
{ int a, b, c;
if (a>b) c = a-b;
else c = b-a;
}
Resolução
# a em $s0, b em $s1, c em $s2 .text main: bge $s0, $s1, else sub $s2, $s0, $s1 # c = a-b j fim else: sub $s2, $s1, $s0 # c = b-a fim: jr $ra
main ()
{ int a;
while (a<20) a++;
}
Resolução
.data lista: .space 400 # reserva 100 inteiros (100*4 bytes) .text main: li $t0, 0 # contador li $t1, 0 # acumulação da soma la $t2, lista # endereço de lista ciclo: bge $t0, 100, fim lw $t3, 0($t2) # $t3 = *lista add $t1, $t1, $t3 addi $t3, $t3, 4 # aponta p/ o próximo addi $t0, $t0, 1 j ciclo fim: jr $ra
main ()
{ int a, b, c;
a=10;
b=20;
for (c=0 ; c<b ; c++)
if (c<a) a--;
else b--;
}