# # MR3 example - Fernando Moraes # # Function: Este programa percorre um vetor e cria um novo, com parte alta # e baixa. Quando o elemento do vetor for par multiplica-se por # uma constante e quando for ímpar divide-se pela constante. # Ver abaixo a área de dados e o resultado esperado. .text .globl main main: la $s0,a # ponteiro para o início do vetor la $s3,Vh la $s4,Vl # ponteiro para os vetores altos e baixos la $s1,n lw $s1,0($s1) sll $s1, $s1, 2 # número de elementos do vetor, multiplicado por 4 la $s2,c lw $s2,0($s2) # constante a ser multiplicada ou dividida loop: beq $s1,$zero,end # controle do término do programa addiu $s1,$s1,-4 # controle do laço, de $s1=n-1 até zero addu $t4,$s0,$s1 lw $t3,0($t4) # lê o elemento atual do vetor andi $t0, $t3, 1 beq $t0, $zero, epar # verifica se é par divu $t3,$s2 # se for impar divide j y epar: jal mmult # se for par multiplica (uso do JAL apenas para teste) y: mfhi $t0 # recupera o resultado dos registradores low e hig mflo $t1 addu $t2,$s3,$s1 # grava os elementos nos vetores hi e low sw $t0,0($t2) addu $t2,$s4,$s1 sw $t1,0($t2) j loop end: j end # termina e tranca mmult: nor $t3, $t3, $zero # fazendo nor com zero é igual a um not, logo, ficamos com mesmo valor nor $t3, $t3, $zero # -- apenas teste do nor --- multu $t3,$s2 # se for par multiplica j $ra .data a: .word 0x231234 0xF333 0xFABCC 0x9765A1 0x2FFFFFF2 n: .word 5 c: .word 0xFA Vh: .word 0x0 0x0 0x0 0x0 0x0 Vl: .word 0x0 ## RESULTADO ESPERADO # VH: 0 9 0 CB 2E # VL: 223FC6C8 F9 F4DC538 9B07 DFFFF254