exercicios Arquitetura 1
$s0 = f
$s1 = g
$s2 = h
$s3 = i
$s4 = j
$s6 = endereço base A
$s7 = endereço base B
f = -g-A[4]
B[8] = A[i-j]
lw $aux0, 4($s6) # $aux0 = A[4] sub $aux1, $s3, $s4 # $aux1 = i-j add $aux2, $zero, $s6 # $aux2 = endereço base de A main: sub $s0, $zero, $s1 # f = 0 - g sub $s0, $s0, $aux0 # f = f - A[4] = -g - A[4] add $aux3, $zero, $zero # $aux3 = 0 (contador) loop: lw $aux4, 0($aux2) # $aux4 = A[n] addi $aux3, $aux3, 1 # $aux3 = $aux3 + 1 addi $aux2, $aux2, 1 # $aux2 aponta para o próximo endereço de A bne $aux3, $aux1, loop # se $aux3 (contador) != $aux1 (i-j), então o loop fará mais uma iteração j end # senão vai para o final do programa end: sw $aux4, 8($s7) # armazena o conteúdo de $aux4 (A[i-j]) em B[8]
______________________________________________________________________________________________________________________________
Exercício 1) Array A de n > 20 valores inteiros. $s0 armazena o endereço do primeiro elemento do array. $a1 armazena o valor n. Quantas vezes ocorre a situação: A[i] + A[i+1] + A[i+2] + ... + A[i+19] == A[i+20] para todo i em que A[i]..A[i+20] refiram-se a elementos válidos do Array A. O resultado deve ficar no $r.
add $sum, $zero, $zero # $sum armazena a soma das 20 primeiras parcelas. add $c1, $zero, $zero # contador 1 add $c2, $zero, $zero # contador 2 add $actual, $zero, $s0 # $actual armazena o endereço de memória em uso do array addi $20, $zero, 20 sub $n20, $a1, $20 # $n20 = n-20 add $r, $zero, $zero verificaOcorrencia: lw $ai, 0($actual) add $sum, $sum, $ai addi $c1, $c1, 1 addi $actual, $actual, 1 bne $c1, $20, verificaOcorrencia j checaIgualdade
checaIgualdade: lw $an, 0($actual) bne $sum, $an, zera # se a soma nao for igual ao A[i+20], zera sem somar 1 ao $r addi $r, $r, 1 # senão soma 1 ao $r j zera # e aí