.data #Declaração das Variáveis vetor: .space 200 #vetor de inteiros preencher: .asciiz "\t\t\tPreencha o vetor com números inteiros \nInforme os numeros: \n" vo: .asciiz "\n\nVetor Ordenado\n" barra: .asciiz "-" vetLido: .asciiz "\n\nVetor Lido\n" tamVetor: .asciiz "\nInforme o tamanho do vetor de 0 a 100\n" .text j main #Ir para o método main ORDENAR: addi $s3,$zero,0 addi $s4,$zero,0 #contador; addi $s1,$zero,0 addi $s2,$zero,0 #auxiliar addi $s5,$a2,-1 #$s5=tam-1 Loop1: slt $t3,$s3,$s5 #Compara se s3 é menor que s5 beq $t3,$zero,saiLoop1 #se condição do slt não satisfeira sai do loop add $s1,$s3,$zero # s1 recebe s3; addi $s4,$s3,1 #s4 recebe s3 +1 Loop2: slt $t3,$s4,$a2 #S4 é menor que a2 beq $t3,$zero,saiLoop2 #se condição do slt nao satisfeita sai do loop2 add $t4,$s4,$zero #$t4 recebe valor de s4 sll $t4,$t4,2 #$t4*4 add $t4,$t4,$a1 #somar $t4 com a base do vetor lw $t5,0($t4) #carrega numero na posição t4 em t5 addi $t2,$s1,0 #t2 recebe s1 sll $t2,$t2,2 #$t2*4 add $t2,$t2,$a1 #soma $t2 com a base do vetor lw $t0,0($t2) #carregar numero na posição t2 em t0 slt $t3, $t5,$t0 #compara se o numero t5 é menor que o numero t0 beq $t3,$zero,else #se slt não for satisfeito vai para else add $s1,$s4,$zero else: addi $s4,$s4,1 #contador++; j Loop2 saiLoop2: beq $s3,$s1,else2 #se s3 for igual a s1 else2 add $t8,$s1,$zero #t8 recebe s1 sll $t8,$t8,2 #t8*4 add $t8,$t8,$a1 #soma t8 com o endereço da base do vetor lw $s2,0($t8) #s2 recebe o valor da posição t8 addi $t6,$s3,0 #t6 recebe s3 sll $t6,$t6,2 #t6*4 add $t6,$t6,$a1 #soma t6 com a base do vetor lw $t7,0($t6) #t7 recebe o valor da posição t6 sw $t7,0($t8) #t7 recebe valor na posição t8 sw $s2,0($t6) #s2 recebe valor t6 else2: addi $s3,$s3,1 #s3++ j Loop1 #pula para o Loop1 saiLoop1: #rótulo saiLoop1 jr $ra #retorna para a função principal main: li $v0,4 #Chamada para imprimir String la $a0, tamVetor #Imprime "\nInforme o tamanho do vetor de 0 a 100" syscall li $v0, 5 #chamada para ler um inteiro syscall la $s0, 0($v0)#grava tamannho do vetor #Preencher o vetor la $a1, vetor #Carrega a base o vetor no registrador a1 add $a2,$zero, $s0 #a2 recebe s0 li $v0,4 #Chamada para imprimir String la $a0,preencher #imprime ""Preencha o vetor com numeros inteiros \nInforme os numeros: \n"" syscall addi $s3,$zero,0 #Loop para preencher vetor Loop: add $t1, $a1, $zero slt $t3,$s3,$a2 #verifica se $s3 é menor que a2 bne $t3,$zero,impressao #se não for menor vai para ordenação de vetor #se for menor preencher o vetor li $v0,5 #Chamada para ler um inteiro syscall #sw $v0,0($a1) #grava o primeiro número la $t1, 0($v0) # carrega o inteiro lido em $t1 addi $s3,$s3,1 #aux++ sll $t1,$a1,2 j Loop impressao: li $v0,4 #Chamada para imprimir String la $a0,vetLido #imprime "Vetor Lido" syscall vetorLido: slt $t3,$t0,$a2 #t0 é menor que 02 beq $t3,$zero,saivetorlido #se slt falso sai do Loop la $a1,vetor #carregar base do vetor add $t1,$t0,$zero #t1 recebe t0 sll $t1,$t1,2 #t1*4 add $t1,$t1,$a1 #soma t1 com a base do vetor lw $t2,0($t1) #carrega valor de t1 em t2 add $a0,$t2,$zero #adiciona o valor de t2 em a0 addi $v0,$zero,1 #carrega o código de imprimir inteiro syscall addi $t1,$a2,-1 #t1 recebe a2 menos 1 beq $t1,$t0,saivetorlido #se t1 igual a t0 sai do loop la $a0,barra #imprime "-" addi $v0,$zero,4 #carrega o código para imprimir msg3 syscall addi $t0,$t0,1 #i++ j vetorLido #jump vetorlido saivetorlido: jal ORDENAR #vai para ordenação do vetor la $a0,vo #Imprime "Vetor Ordenado" addi $v0,$zero,4 #Chamada para ler String syscall la $a0,barra #imprime "-" addi $v0,$zero,4 #carrega o código para imprimir String syscall add $t0,$zero,$zero #cont recebe zero Loopimpressao: slt $t3,$t0,$a2 #verifica se t0 é menor que a2 beq $t3,$zero,sairimpressao #se a condição slt for falsa sai do Loopimpressao la $a1,vetor #carrega base do vetor add $t1,$t0,$zero #t1 recebe t0 sll $t1,$t1,2 #$t1*4 add $t1,$t1,$a1 #soma t1 com a base do vetor lw $t2,0($t1) #carrega t1 em t2 add $a0,$t2,$zero #carrega o valor de t2 em a0 addi $v0,$zero,1 #código para imprimir inteiro syscall addi $t1,$a2,-1 #t1 recebe a2 menos 1 beq $t1,$t0,sairimpressao #se t1 for igual a t2 vai para sairimpressão la $a0,barra #imprime "-" addi $v0,$zero,4 #carrega o código de imprimir msg3 syscall addi $t0,$t0,1 #i++ j Loopimpressao #jump Loopimpressao sairimpressao: addi $v0,$zero,10 #código para finalizar o programa syscall #Chamar o Sistema Operacional