Advertisement
Guest User

Untitled

a guest
Nov 14th, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.51 KB | None | 0 0
  1. .data
  2. inicio: .asciiz "Deseja iniciar um novo jogo?\n"
  3. jogada: .asciiz "Insira a jogada: \n "
  4. respostanovojogo: .space 5
  5. barra: .asciiz "|"
  6. paragrafo: .asciiz "\n"
  7. sim: .asciiz "s"
  8. mat: .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ##o array começa a 0 , pois o tabuleiro inicialmente está a 0
  9. colaux: .word 0,1,2,3,4,5,6
  10. .text
  11.  
  12. main:
  13. ## Print da mensagem de inicio que pergunta se inicia novo jogo
  14. addi $v0, $0 , 4
  15. la $a0, inicio
  16. syscall
  17.  
  18. ## Lemos a resposta do jogador e armazena-mos em respostanovojogo
  19. addi $v0 , $0 , 8
  20. la $a0, respostanovojogo
  21. la $a1, 5
  22. syscall
  23.  
  24. la $t0 , sim ## t0 tem agora o endereço da string sim
  25. lb $t1, 0($a0) ## t0 tem agora o primeiro byte da resposta do utilziador
  26. lb $t2, 0 ($t0) ## t2 tem agora o primeiro byte da string sim
  27.  
  28. beq $t2,$t1, novojogo ## se t2 == t1 entao a resposta foi sim , saltamos para um novo jogo , senao fechamos o programa
  29.  
  30. ## Instruçao que indica o fim do programa
  31. addi $v0 , $0 , 10
  32. syscall
  33.  
  34. ## INICIO DA FUNÇAO NOVO JOGO
  35. novojogo:
  36. la $s0 , mat ## s0 fica com o endereço inicial da matriz
  37. la $a0 , ($s0) ## carregamos para a0 o endereço da nossa linha que vamos enviar
  38. jal print_tabuleiro
  39.  
  40. and $s1, $0 , $0 ## s1 -> contador de jogadas
  41. while:
  42. slti $t0, $s1 , 42 ## se o contador de jogadas for menor que 42 entao , t0= 1 e continuamos a pedir jogadas
  43. beq $t0, $0 , endwhile ## se o t0 = 0 , entao acabamos o ciclo
  44. jal jogada_jogador1
  45. add $a0 , $v0 , $0 ##passamos como argumento , o numero retornado da funçao jogada_jogador1
  46. add $a1, $s0, $0 ##passamos tambem como argumento o tabuleiro atual
  47. jal registar_jogada1
  48. add $a0 , $v0, $0
  49. jal print_tabuleiro
  50. endwhile:
  51. jr $ra
  52.  
  53. ## FIM DA FUNÇAO NOVO JOGO
  54.  
  55. ## INICIO DA FUNÇAO PRINT TABULEIRO
  56. print_tabuleiro:
  57. and $t0 , $0 , $0 ##t0 = 0 , t0 é a nossa condiçao do ciclo
  58. and $t2 , $0 , $0 ## indice do array
  59. la $t3 , ($a0)
  60. and $t5 , $0 , $0 ## indice para dar paragrafo
  61. LOOP2:
  62. slti $t1 , $t0, 42 ## se t0 < 42 entao t1 = 1
  63. beq $t1 , $0 , ENDLOOP2 ## se t1 = 0 entao saltamos fora do ciclo
  64. lw $t4 , 0($t3) ## t4 = linha[i]
  65. ## Imprimimos o valor atual de linha[i]
  66. addi $v0 , $0 , 1
  67. la $a0 , ($t4)
  68. syscall
  69. ## Imprimimos a barra |
  70. addi $v0, $0 , 4
  71. la $a0, barra
  72. syscall
  73. slti $t6 , $t5 , 6 ## se t5 < 7 entao t6 = 1
  74. beq $t6 , $0 , paragra
  75. addi $t0 , $t0 , 1 ## incrementamos o limitador do ciclo
  76. addi $t3 , $t3 , 4 ## incrementamos o indice do array
  77. addi $t5 , $t5 , 1 ## t5 ++ , t5 é o nosso delimitador para o paragrafo na representaçao da matriz
  78. j LOOP2
  79. paragra:
  80. addi $v0, $0 , 4
  81. la $a0, paragrafo
  82. syscall
  83. and $t5 , $0 , $0
  84. addi $t0 , $t0 , 1
  85. addi $t3 , $t3 , 4
  86. j LOOP2
  87. ENDLOOP2:
  88. jr $ra
  89.  
  90. ## FIM DA FUNÇAO PRINT_TABULEIRO
  91.  
  92. ## INICIO DA FUNÇAO JOGADA_JOGADOR1
  93. jogada_jogador1:
  94. ## Imprimimos a mensagem jogada
  95. addi $v0, $0 , 4
  96. la $a0, jogada
  97. syscall
  98. addi $v0, $0 , 5 ## como o inteiro lido fica em $v0 , podemos retornar para onde estavamos e retornar o numero inserido
  99. syscall
  100. jr $ra
  101. ## FIM DA FUNÇAO JOGADA_JOGADOR1
  102.  
  103. ##INICIO registar_JOGADA1
  104. registar_jogada1:
  105. and $t0,$0,$0 ## condiçao do ciclo para percorrer o array das colunas
  106. la $t1 , colaux ##carregamos para t1 o endereço do array auxiliar das colunas
  107. LOOP3:
  108. slti $t2 , $t0, 7 ## enquanto indice < 6 percorremos as colunas
  109. beq $t2 , $0, ENDLOOP3
  110. lw $t3 , 0($t1) ##carregamos para t3 o valor atual do array de colunas
  111. beq $t3,$a0,ENDLOOP3 ## se o valor da coluna for valido entao prosseguimos
  112. addi $t1, $t1 , 4 ## incrementamos o indice do array até encontrar-mos a coluna
  113. addi $t0 , $t0 , 1 ## ++
  114. j LOOP3
  115. ENDLOOP3:
  116. and $t0,$0,$0 ## zeramos t0 para reutilizar
  117. la $t1 , ($a1) ## carrego para t1 o meu tabuleiro
  118. sll $t3, $t3,2 ## t3 = numero coluna * 4 , que nos dá o indice da coluna
  119. addi $t3, $t3, 140 ## vamos buscar a ultima posiçao na coluna pretendida
  120. add $t3, $t1 , $t3 ## t3 = indice inicial + endereço da nossa coluna
  121. LOOP4:
  122. slti $t2, $t0 , 6 ## enquanto t0 for menor que 6 percorremos o ciclo
  123. beq $t2, $0 , ENDLOOP4
  124. lw $t4 , 0 ($t3) ## t4 = matrix[i][j]
  125. beq $t4, $0, jogada_valida
  126. addi $t3, $t3 , -28 ## incrementamos o indice para o numero acima
  127. addi $t0, $t0 , 1 ##t0++
  128.  
  129. ENDLOOP4:
  130. jr $ra
  131. jogada_valida:
  132. ##se conseguir registar , devolvemos 1 e o tabuleiro atualizado
  133. addi $t0, $0 , 1
  134. sw $t0 , 0($t3) ## a posiçao na matrix[i][j] fica = 1
  135. add $v0 , $0 , $t1 ## retorno o tabuleiro atualizado
  136. jr $ra
  137. ##FIM registar_JOGADA1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement