Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- msj3: .asciiz "\nJUGADOR 1 "
- msj4: .asciiz "\nJUGADOR 2 "
- msj5: .asciiz "\nLas cifras no se pueden repetir"
- msj6: .asciiz "muerto/s y "
- msj7: .asciiz "herido/s"
- msj8: .asciiz "\nHas perdido...."
- msj9: .asciiz "\nHas ganado!!!!!"
- intentos: .byte 0
- numSecreto: .space 5
- numTecleado: .space 5
- .text
- main: addi $sp,$sp,-4 #Reserva espacio en la pila
- sw $ra,($sp) #Guarda el valor de retorno en este espacio.
- mensaje1: la $a0,msj3
- addi $v0,$0,4
- syscall #Imprime "JUGADOR 1"
- la $a0,msj1
- addi $v0,$0,4
- syscall #Imprime "Introduzca un numero secreto"
- la $s1,numSecreto #Carga la direccion de numSecreto
- add $s3,$0,$0 #Inicializa contador.
- addi $s4,$0,4 #Inicializa tamaño maximo.
- bucleNumSecreto: jal introCaracter
- add $s2,$v1,$0 #Guarda en $s2 la cifra devuelta por intrCaracter
- compuebaRango1: slti $s5,$s2,0x30 #Si $s2<0-->pone un 1 en $s5
- bne $s5,$0,error1 #$s5=1-->error
- slti $s5,$s2,0x38 #Si $s2<7-->pone un 1 en $s5
- beq $s5,$0,error1 #$s5=0-->error
- add $t7,$zero,$zero #Contador aux
- la $t5,numSecreto
- compruebaRepeticion: beq $s3,$t7,guarda
- lb $t6,($t5) #lee lo que hay en esa posicion
- beq $s2,$t6,error2 #Si la cifra ya estaba,error.
- addi $t7,$t7,1 #aumenta contador aux
- addi $t5,$t5,1
- j compruebaRepeticion
- guarda: la $s1,numSecreto
- sb $s2,($s1) #Guarda la cifra en numSecreto.
- addi $s1,$s1,1 #Aumenta la posicion de numSecreto.
- addi $s3,$s3,1 #Aumenta contador.
- bne $s3,$s4,bucleNumSecreto #Si no ha llegado al final, vuelve a recoger otra cifra
- j mensaje2
- error1: la $a0,msj2
- addi $v0,$0,4
- syscall #Imprime "Las cifras deben estar comprendidas entre 0 y 7"
- j mensaje1 #Vuelve a pedir un numero secreto al jugador 1.
- error2: la $a0,msj5
- addi $v0,$0,4
- syscall
- j mensaje1
- mensaje2: la $a0,msj4
- addi $v0,$0,4
- syscall #Imprime "JUGADOR 2"
- la $a0,msj1
- addi $v0,$0,4
- syscall #Imprime "Introduzca un numero secreto"
- la $s6,numTecleado #Carga la direccion de numTecleado
- add $s3,$0,$0 #Inicializar contador.
- addi $s4,$0,4 #Inicializar tamaño maximo.
- bucleNumTecleado: addi $v0,$0,0x0c
- syscall #Recoge una cifra.
- add $s2,$v0,$0 #Guarda en $s2 la cifra recogida.
- compruebaRango2: slti $s5,$s2,0x30 #Si $s2<0-->pone un 1 en $s5
- bne $s5,$0,error3 #$s5=1-->error
- slti $s5,$s2,0x38 #Si $s2<7-->pone un 1 en $s5
- beq $s5,$0,error3 #$s5=0
- sb $s2,($s6) #Guarda la cifra en numTecleado.
- addi $s6,$s6,1 #Aumenta la posicion de numTecleado.
- addi $s3,$s3,1 #Aumenta contador.
- bne $s3,$s4,bucleNumTecleado#Si no ha llegado al final, vuelve a recoger otra cifra.
- j siguiente
- error3: la $a0,msj2
- addi $v0,$0,4
- syscall #Imprime "Las cifras deben estar comprendidas entre 0 y 7"
- j mensaje2 #Vuelve a pedir un numero secreto al jugador 2.
- siguiente: jal comprobarMuertos
- addi $a0,$0,0x0a
- addi $v0,$0,0x0b
- syscall
- add $a0,$v1,$0
- beq $a0,4,hasGanado #Si el numero de muertos es 4, hasGanado.
- addi $v0,$0,1
- syscall #Imprime el numero de muertos.
- la $a0,msj6
- addi $v0,$0,4
- syscall
- jal comprobarHeridos
- add $a0,$v1,$0
- addi $v0,$0,1
- syscall #Imprime el numero de heridos
- la $a0,msj7
- addi $v0,$0,4
- syscall
- sumarIntentos: la $s6,intentos
- lb $s7,($s6)
- addi $s7,$s7,1
- sb $s7,($s6) #Aumenta el contador de intentos.
- beq $s7,10,hasPerdido #Si es 10, hasPerdido.
- j mensaje2 #Si no es 10, vuelve a pedir un numero secreto al jugador 2.
- hasPerdido: la $a0,msj8
- addi $v0,$0,4
- syscall #Imprime "Has perdido"
- j fin
- hasGanado: la $a0,msj9
- addi $v0,$0,4
- syscall #Imprime "Has ganado"
- fin: lw $ra,($sp) #Se recupera $ra.
- addi $sp,$sp,4 #Se libera el espacio de pila.
- jr $ra
- ######################################################################################################
- introCaracter: lui $t1, 0xffff
- bucle1: lw $t2,($t1)
- andi $t2,$t2,1
- beq $t2,$zero,bucle1
- lw $v1,4($t1)
- imprimirAsterisco: addi $a0,$zero,0x2a
- addi $v0,$zero,0x0b
- syscall
- finIntroCaracter: jr $ra
- #####################################################################################################
- comprobarMuertos: la $t1,numSecreto
- la $t3,numTecleado
- addi $t5,$0,4 #Tamaño maximo
- add $t6,$0,$0 #ContadorPosiciones
- add $t7,$0,$0 #ContadorMuertes
- bucleCompMuertos:
- lb $t2,($t1) #NumSecreto
- lb $t4,($t3) #NumTecleado
- beq $t2,$t4,sumaMuertos
- continuar: addi $t1,$t1,1
- addi $t3,$t3,1
- addi $t6,$t6,1
- beq $t6,$t5,finCompMuertos
- j bucleCompMuertos
- sumaMuertos: addi $t7,$t7,1
- j continuar
- finCompMuertos: add $v1,$t7,$0
- jr $ra
- #######################################################################################################
- comprobarHeridos: la $t1,numSecreto
- la $t3,numTecleado
- addi $t5,$0,4 #Tamaño maximo
- add $t6,$0,$0 #ContadorPosicionesNumSecreto
- add $t8,$t0,$0 #ContadorPosicionesNumTecleado
- add $t7,$0,$0 #ContadorHeridos.
- bucleCompHeridos: lb $t2,($t1) #NumSecreto
- lb $t4,($t3) #NumTecleado
- beq $t4,$t2,sumaHeridos
- continuar2: addi $t1,$t1,1
- addi $t6,$t6,1
- bne $t6,$t5,bucleCompHeridos
- addi $t3,$t3,1
- addi $t8,$t8,1
- add $t6,$0,$0
- la $t1,numSecreto
- bne $t8,$t5,bucleCompHeridos
- j finCompHeridos
- sumaHeridos: addi $t7,$t7,1
- beq $t6,$t8,restaHeridos
- j continuar2
- restaHeridos: addi $t7,$t7,-1
- j continuar2
- finCompHeridos: add $v1,$t7,$0
- jr $ra
Add Comment
Please, Sign In to add comment