Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .data
- inicio: .asciiz "Deseja iniciar um novo jogo?\n"
- jogada: .asciiz "Insira a jogada: \n "
- respostanovojogo: .space 5
- barra: .asciiz "|"
- paragrafo: .asciiz "\n"
- sim: .asciiz "s"
- 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
- colaux: .word 0,1,2,3,4,5,6
- .text
- main:
- ## Print da mensagem de inicio que pergunta se inicia novo jogo
- addi $v0, $0 , 4
- la $a0, inicio
- syscall
- ## Lemos a resposta do jogador e armazena-mos em respostanovojogo
- addi $v0 , $0 , 8
- la $a0, respostanovojogo
- la $a1, 5
- syscall
- la $t0 , sim ## t0 tem agora o endereço da string sim
- lb $t1, 0($a0) ## t0 tem agora o primeiro byte da resposta do utilziador
- lb $t2, 0 ($t0) ## t2 tem agora o primeiro byte da string sim
- beq $t2,$t1, novojogo ## se t2 == t1 entao a resposta foi sim , saltamos para um novo jogo , senao fechamos o programa
- ## Instruçao que indica o fim do programa
- addi $v0 , $0 , 10
- syscall
- ## INICIO DA FUNÇAO NOVO JOGO
- novojogo:
- la $s0 , mat ## s0 fica com o endereço inicial da matriz
- la $a0 , ($s0) ## carregamos para a0 o endereço da nossa linha que vamos enviar
- jal print_tabuleiro
- and $s1, $0 , $0 ## s1 -> contador de jogadas
- while:
- slti $t0, $s1 , 42 ## se o contador de jogadas for menor que 42 entao , t0= 1 e continuamos a pedir jogadas
- beq $t0, $0 , endwhile ## se o t0 = 0 , entao acabamos o ciclo
- jal jogada_jogador1
- add $a0 , $v0 , $0 ##passamos como argumento , o numero retornado da funçao jogada_jogador1
- add $a1, $s0, $0 ##passamos tambem como argumento o tabuleiro atual
- jal registar_jogada1
- add $a0 , $v0, $0
- jal print_tabuleiro
- endwhile:
- jr $ra
- ## FIM DA FUNÇAO NOVO JOGO
- ## INICIO DA FUNÇAO PRINT TABULEIRO
- print_tabuleiro:
- and $t0 , $0 , $0 ##t0 = 0 , t0 é a nossa condiçao do ciclo
- and $t2 , $0 , $0 ## indice do array
- la $t3 , ($a0)
- and $t5 , $0 , $0 ## indice para dar paragrafo
- LOOP2:
- slti $t1 , $t0, 42 ## se t0 < 42 entao t1 = 1
- beq $t1 , $0 , ENDLOOP2 ## se t1 = 0 entao saltamos fora do ciclo
- lw $t4 , 0($t3) ## t4 = linha[i]
- ## Imprimimos o valor atual de linha[i]
- addi $v0 , $0 , 1
- la $a0 , ($t4)
- syscall
- ## Imprimimos a barra |
- addi $v0, $0 , 4
- la $a0, barra
- syscall
- slti $t6 , $t5 , 6 ## se t5 < 7 entao t6 = 1
- beq $t6 , $0 , paragra
- addi $t0 , $t0 , 1 ## incrementamos o limitador do ciclo
- addi $t3 , $t3 , 4 ## incrementamos o indice do array
- addi $t5 , $t5 , 1 ## t5 ++ , t5 é o nosso delimitador para o paragrafo na representaçao da matriz
- j LOOP2
- paragra:
- addi $v0, $0 , 4
- la $a0, paragrafo
- syscall
- and $t5 , $0 , $0
- addi $t0 , $t0 , 1
- addi $t3 , $t3 , 4
- j LOOP2
- ENDLOOP2:
- jr $ra
- ## FIM DA FUNÇAO PRINT_TABULEIRO
- ## INICIO DA FUNÇAO JOGADA_JOGADOR1
- jogada_jogador1:
- ## Imprimimos a mensagem jogada
- addi $v0, $0 , 4
- la $a0, jogada
- syscall
- addi $v0, $0 , 5 ## como o inteiro lido fica em $v0 , podemos retornar para onde estavamos e retornar o numero inserido
- syscall
- jr $ra
- ## FIM DA FUNÇAO JOGADA_JOGADOR1
- ##INICIO registar_JOGADA1
- registar_jogada1:
- and $t0,$0,$0 ## condiçao do ciclo para percorrer o array das colunas
- la $t1 , colaux ##carregamos para t1 o endereço do array auxiliar das colunas
- LOOP3:
- slti $t2 , $t0, 7 ## enquanto indice < 6 percorremos as colunas
- beq $t2 , $0, ENDLOOP3
- lw $t3 , 0($t1) ##carregamos para t3 o valor atual do array de colunas
- beq $t3,$a0,ENDLOOP3 ## se o valor da coluna for valido entao prosseguimos
- addi $t1, $t1 , 4 ## incrementamos o indice do array até encontrar-mos a coluna
- addi $t0 , $t0 , 1 ## ++
- j LOOP3
- ENDLOOP3:
- and $t0,$0,$0 ## zeramos t0 para reutilizar
- la $t1 , ($a1) ## carrego para t1 o meu tabuleiro
- sll $t3, $t3,2 ## t3 = numero coluna * 4 , que nos dá o indice da coluna
- addi $t3, $t3, 140 ## vamos buscar a ultima posiçao na coluna pretendida
- add $t3, $t1 , $t3 ## t3 = indice inicial + endereço da nossa coluna
- LOOP4:
- slti $t2, $t0 , 6 ## enquanto t0 for menor que 6 percorremos o ciclo
- beq $t2, $0 , ENDLOOP4
- lw $t4 , 0 ($t3) ## t4 = matrix[i][j]
- beq $t4, $0, jogada_valida
- addi $t3, $t3 , -28 ## incrementamos o indice para o numero acima
- addi $t0, $t0 , 1 ##t0++
- ENDLOOP4:
- jr $ra
- jogada_valida:
- ##se conseguir registar , devolvemos 1 e o tabuleiro atualizado
- addi $t0, $0 , 1
- sw $t0 , 0($t3) ## a posiçao na matrix[i][j] fica = 1
- add $v0 , $0 , $t1 ## retorno o tabuleiro atualizado
- jr $ra
- ##FIM registar_JOGADA1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement