Advertisement
Guest User

Untitled

a guest
Nov 27th, 2014
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.98 KB | None | 0 0
  1. .data
  2. dados: .space 20 # reservando 20 bytes de memória para o vetor
  3. print1: .asciiz "\nDigite um numero: "
  4. print2: .asciiz " eh um numero par\n"
  5. print3: .asciiz " eh um numero impar\n"
  6.  
  7. .text
  8. main:
  9. la $s0, dados # carrega endereço inicial do vetor dados
  10. la $a0, print1 # carrega endereço inicial de print1
  11. li $t0, 0 # incrementador do vetor
  12. loop: # abaixo: instruções necessárias para carregar o vetor dados
  13. li $v0, 4
  14. syscall # imprime mensagem solicitando numero
  15. li $v0, 5
  16. syscall # lê um numero e guarda em $v0
  17. add $s1, $s0, $t0 # aponta para um endereço do vetor
  18. sw $v0, ($s1) # guarda o numero no vetor
  19. addi $t0, $t0, 4 # pula para o proximo indice do vetor, 4 bytes a frente (uma palavra a frente)
  20. blt $t0, 20, loop # enquanto nao chegar ao final do vetor, continua no loop
  21.  
  22. jal parImpar # chama a função parImpar
  23. li $v0, 10
  24. syscall # finaliza programa
  25.  
  26. parImpar:
  27. li $t0, 0 # incrementador do vetor
  28. li $t3, 2 # divisor para a instrução div
  29. loop2:
  30. add $s1, $s0, $t0 # obtem endereço de um indice do vetor
  31. lw $t1, ($s1) # copia um numero do vetor para o registrador $t1
  32. div $t1, $t3 # divide o numero por 2 (quociente fica em LO e resto em HI)
  33. mfhi $t2 # copia o resto para o registrador $t2
  34. bne $t2, 0, impar # se o resto for diferente de 0, então é um numero impar (desvia para impar)
  35. li $v0, 1
  36. move $a0, $t1
  37. syscall # imprime o numero
  38. li $v0, 4
  39. la $a0, print2
  40. syscall # imprime mensagem par
  41. addi $t0, $t0, 4 # incrementa posição do vetor
  42. blt $t0, 20, loop2 # enquanto nao chegar ao final do vetor, continua no loop
  43. jr $ra # finaliza função e retorna para o programa principal
  44. impar:
  45. li $v0, 1
  46. move $a0, $t1
  47. syscall # imprime o numero
  48. li $v0, 4
  49. la $a0, print3
  50. syscall # imprime mensagem impar
  51. addi $t0, $t0, 4 # incrementa posição do vetor
  52. blt $t0, 20, loop2 # enquanto nao chegar ao final do vetor, continua no loop
  53. jr $ra # finaliza função e retorna para o programa principal
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement