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