# # Algoritmo que computa um vetor contendo os elementos comuns a 2 vetores # # // PSEUDO CÓDIGO // # # comum=0 # for(i=size; i>0 ; i--) # { # flag=0; # # for(j=size; j>0 ; j--) // loop 2 # if( V1[i] == V2[j] # { flag=1; # break; # } # # if(flag) # for(j=comum; j>0 ; j--) // loop 3 # if( V1[i] == V3[j] # { flag=0; # break; # } # # if(flag) # V3[ comum++ ] = V1[i] # # } .text .globl main main: la $s1, V1 la $t7, size lw $t7, 0($t7) # t7 será nosso controle de fim loop1: blez $t7, fim # termina ao percorrer todo V1 xor $t9, $t9, $t9 # zera o "flag" lw $t0, 0($s1) # &( *V1 ) # LOOP 2 percorre V2 ########################################### la $s2, V2 la $t2, size lw $t2,0($t2) loop2: blez $t2, fim_loop2 lw $t1, 0($s2) # &( *V2 ) beq $t0, $t1, setaflag addiu $s2, $s2, 4 addiu $t2, $t2, -1 j loop2 setaflag: li $t9, 1 fim_loop2: beq $t9, $zero, nextV1 # se o flag for '0' próxima iteração # LOOP 3 percorre V3 ########################################### la $s2, V3 la $t2, comum lw $t2,0($t2) loop3: blez $t2, fim_loop3 lw $t1, 0($s2) # &( *V3 ) beq $t0, $t1, resetflag addiu $s2, $s2, 4 addiu $t2, $t2, -1 j loop3 resetflag: li $t9, 0 fim_loop3: beq $t9, $zero, nextV1 # se o flag for '0' próxima iteração # acrescenta elemento em V3 ########################################### la $s2, V3 la $s5, comum lw $t2,0($s5) addu $t1, $t2, $t2 addu $t1, $t1, $t1 addu $t1, $s2, $t1 # posição de novo elemento sw $t0, 0($t1) # armazena addiu $t2, $t2, 1 sw $t2, 0($s5) nextV1: addiu $s1, 4 # incrementa posição no vetor V1 addiu $t7, -1 # decrementa o número de elementos de V1 j loop1 # now, stay in loop fim: j fim .data V1: .word 0x5 0x5 0xb 0x5 0xa 0xFFF V2: .word 0xb 0x5 0xa 0x5 0xa 0xFFF size: .word 6 comum: .word 0 V3: .word 0