Guest User

Untitled

a guest
May 20th, 2018
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.62 KB | None | 0 0
  1. msj3: .asciiz "\nJUGADOR 1 "
  2. msj4: .asciiz "\nJUGADOR 2 "
  3. msj5: .asciiz "\nLas cifras no se pueden repetir"
  4. msj6: .asciiz "muerto/s y "
  5. msj7: .asciiz "herido/s"
  6. msj8: .asciiz "\nHas perdido...."
  7. msj9: .asciiz "\nHas ganado!!!!!"
  8. intentos: .byte 0
  9. numSecreto: .space 5
  10. numTecleado: .space 5
  11.  
  12. .text
  13. main: addi $sp,$sp,-4 #Reserva espacio en la pila
  14. sw $ra,($sp) #Guarda el valor de retorno en este espacio.
  15.  
  16. mensaje1: la $a0,msj3
  17. addi $v0,$0,4
  18. syscall #Imprime "JUGADOR 1"
  19. la $a0,msj1
  20. addi $v0,$0,4
  21. syscall #Imprime "Introduzca un numero secreto"
  22.  
  23. la $s1,numSecreto #Carga la direccion de numSecreto
  24. add $s3,$0,$0 #Inicializa contador.
  25. addi $s4,$0,4 #Inicializa tamaño maximo.
  26.  
  27. bucleNumSecreto: jal introCaracter
  28.  
  29. add $s2,$v1,$0 #Guarda en $s2 la cifra devuelta por intrCaracter
  30.  
  31. compuebaRango1: slti $s5,$s2,0x30 #Si $s2<0-->pone un 1 en $s5
  32. bne $s5,$0,error1 #$s5=1-->error
  33. slti $s5,$s2,0x38 #Si $s2<7-->pone un 1 en $s5
  34. beq $s5,$0,error1 #$s5=0-->error
  35.  
  36. add $t7,$zero,$zero #Contador aux
  37. la $t5,numSecreto
  38.  
  39. compruebaRepeticion: beq $s3,$t7,guarda
  40. lb $t6,($t5) #lee lo que hay en esa posicion
  41. beq $s2,$t6,error2 #Si la cifra ya estaba,error.
  42. addi $t7,$t7,1 #aumenta contador aux
  43. addi $t5,$t5,1
  44. j compruebaRepeticion
  45.  
  46.  
  47. guarda: la $s1,numSecreto
  48. sb $s2,($s1) #Guarda la cifra en numSecreto.
  49. addi $s1,$s1,1 #Aumenta la posicion de numSecreto.
  50. addi $s3,$s3,1 #Aumenta contador.
  51. bne $s3,$s4,bucleNumSecreto #Si no ha llegado al final, vuelve a recoger otra cifra
  52.  
  53. j mensaje2
  54.  
  55.  
  56. error1: la $a0,msj2
  57. addi $v0,$0,4
  58. syscall #Imprime "Las cifras deben estar comprendidas entre 0 y 7"
  59. j mensaje1 #Vuelve a pedir un numero secreto al jugador 1.
  60.  
  61.  
  62. error2: la $a0,msj5
  63. addi $v0,$0,4
  64. syscall
  65. j mensaje1
  66.  
  67. mensaje2: la $a0,msj4
  68. addi $v0,$0,4
  69. syscall #Imprime "JUGADOR 2"
  70. la $a0,msj1
  71. addi $v0,$0,4
  72. syscall #Imprime "Introduzca un numero secreto"
  73.  
  74. la $s6,numTecleado #Carga la direccion de numTecleado
  75. add $s3,$0,$0 #Inicializar contador.
  76. addi $s4,$0,4 #Inicializar tamaño maximo.
  77.  
  78. bucleNumTecleado: addi $v0,$0,0x0c
  79. syscall #Recoge una cifra.
  80. add $s2,$v0,$0 #Guarda en $s2 la cifra recogida.
  81.  
  82. compruebaRango2: slti $s5,$s2,0x30 #Si $s2<0-->pone un 1 en $s5
  83. bne $s5,$0,error3 #$s5=1-->error
  84. slti $s5,$s2,0x38 #Si $s2<7-->pone un 1 en $s5
  85. beq $s5,$0,error3 #$s5=0
  86.  
  87. sb $s2,($s6) #Guarda la cifra en numTecleado.
  88. addi $s6,$s6,1 #Aumenta la posicion de numTecleado.
  89. addi $s3,$s3,1 #Aumenta contador.
  90. bne $s3,$s4,bucleNumTecleado#Si no ha llegado al final, vuelve a recoger otra cifra.
  91.  
  92. j siguiente
  93.  
  94. error3: la $a0,msj2
  95. addi $v0,$0,4
  96. syscall #Imprime "Las cifras deben estar comprendidas entre 0 y 7"
  97. j mensaje2 #Vuelve a pedir un numero secreto al jugador 2.
  98.  
  99. siguiente: jal comprobarMuertos
  100. addi $a0,$0,0x0a
  101. addi $v0,$0,0x0b
  102. syscall
  103. add $a0,$v1,$0
  104. beq $a0,4,hasGanado #Si el numero de muertos es 4, hasGanado.
  105. addi $v0,$0,1
  106. syscall #Imprime el numero de muertos.
  107. la $a0,msj6
  108. addi $v0,$0,4
  109. syscall
  110. jal comprobarHeridos
  111. add $a0,$v1,$0
  112. addi $v0,$0,1
  113. syscall #Imprime el numero de heridos
  114. la $a0,msj7
  115. addi $v0,$0,4
  116. syscall
  117.  
  118. sumarIntentos: la $s6,intentos
  119. lb $s7,($s6)
  120. addi $s7,$s7,1
  121. sb $s7,($s6) #Aumenta el contador de intentos.
  122. beq $s7,10,hasPerdido #Si es 10, hasPerdido.
  123. j mensaje2 #Si no es 10, vuelve a pedir un numero secreto al jugador 2.
  124.  
  125. hasPerdido: la $a0,msj8
  126. addi $v0,$0,4
  127. syscall #Imprime "Has perdido"
  128. j fin
  129.  
  130. hasGanado: la $a0,msj9
  131. addi $v0,$0,4
  132. syscall #Imprime "Has ganado"
  133.  
  134. fin: lw $ra,($sp) #Se recupera $ra.
  135. addi $sp,$sp,4 #Se libera el espacio de pila.
  136.  
  137. jr $ra
  138.  
  139. ######################################################################################################
  140.  
  141. introCaracter: lui $t1, 0xffff
  142. bucle1: lw $t2,($t1)
  143. andi $t2,$t2,1
  144. beq $t2,$zero,bucle1
  145. lw $v1,4($t1)
  146.  
  147. imprimirAsterisco: addi $a0,$zero,0x2a
  148. addi $v0,$zero,0x0b
  149. syscall
  150. finIntroCaracter: jr $ra
  151.  
  152. #####################################################################################################
  153.  
  154. comprobarMuertos: la $t1,numSecreto
  155. la $t3,numTecleado
  156. addi $t5,$0,4 #Tamaño maximo
  157. add $t6,$0,$0 #ContadorPosiciones
  158. add $t7,$0,$0 #ContadorMuertes
  159. bucleCompMuertos:
  160. lb $t2,($t1) #NumSecreto
  161. lb $t4,($t3) #NumTecleado
  162. beq $t2,$t4,sumaMuertos
  163.  
  164. continuar: addi $t1,$t1,1
  165. addi $t3,$t3,1
  166. addi $t6,$t6,1
  167. beq $t6,$t5,finCompMuertos
  168. j bucleCompMuertos
  169. sumaMuertos: addi $t7,$t7,1
  170. j continuar
  171. finCompMuertos: add $v1,$t7,$0
  172. jr $ra
  173.  
  174. #######################################################################################################
  175.  
  176. comprobarHeridos: la $t1,numSecreto
  177. la $t3,numTecleado
  178. addi $t5,$0,4 #Tamaño maximo
  179. add $t6,$0,$0 #ContadorPosicionesNumSecreto
  180. add $t8,$t0,$0 #ContadorPosicionesNumTecleado
  181. add $t7,$0,$0 #ContadorHeridos.
  182. bucleCompHeridos: lb $t2,($t1) #NumSecreto
  183. lb $t4,($t3) #NumTecleado
  184. beq $t4,$t2,sumaHeridos
  185.  
  186. continuar2: addi $t1,$t1,1
  187. addi $t6,$t6,1
  188. bne $t6,$t5,bucleCompHeridos
  189. addi $t3,$t3,1
  190. addi $t8,$t8,1
  191. add $t6,$0,$0
  192. la $t1,numSecreto
  193. bne $t8,$t5,bucleCompHeridos
  194. j finCompHeridos
  195. sumaHeridos: addi $t7,$t7,1
  196. beq $t6,$t8,restaHeridos
  197. j continuar2
  198. restaHeridos: addi $t7,$t7,-1
  199. j continuar2
  200.  
  201. finCompHeridos: add $v1,$t7,$0
  202. jr $ra
Add Comment
Please, Sign In to add comment