es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

MIPS atrapado en un bucle infinito

Como parte de mi informe universitario, se me pide editar un código MIPS y poner el código repetitivo en una subrutina, sin embargo, cada vez que llamo a mi subrutina, se queda atrapado en un ciclo infinito repitiendo toda la subrutina. El programa debe tomar 4 entradas del usuario, sumarlas y mostrar el total, lo cual funciona sin la subrutina. No estoy seguro si me falta algo en mi código o si simplemente lo he escrito mal. ¡Gracias por cualquier ayuda! :]

        .data

enterMsg1: .asciiz "Por favor, ingrese los últimos cuatro dígitos de su número de estudiante \n"
enterMsg2: .asciiz "Presione enter entre cada dígito \n"
enterMsg3: .asciiz "Ingrese el siguiente dígito \n"
totalMsg1: .asciiz "La suma de los dígitos es: "

        .text

        # Imprimir texto de instrucción inicial a la consola

        addi $v0, $zero, 4
        la $a0, enterMsg1
        syscall

        # Imprimir texto de instrucción secundario a la consola

        addi $v0, $zero, 4
        la $a0, enterMsg2
        syscall

        # Leer un entero desde la entrada del teclado y almacenar la entrada en $s0 para el total

        addi $v0, $zero, 5
        syscall
        add $s0, $zero, $v0

        jal NextDigit
        jal NextDigit
        jal NextDigit

        # Imprimir el texto que solicita el siguiente dígito en la consola

NextDigit:
        addi $v0, $zero, 4
        la $a0, enterMsg3
        syscall

        addi $v0, $zero, 5
        syscall
        add $s0, $s0, $v0
        jr $ra

        # Imprimir el texto de instrucción total a la consola

        addi $v0, $zero, 4
        la $a0, totalMsg1
        syscall

        add $a0, $s0, $zero
        addi $v0, $zero, 1
        syscall

        addi $v0, $zero, 10
        syscall
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema podría estar en los comandos jal dentro de la subrutina NextDigit. Cada vez que se llama al comando jal, saltará de nuevo al comienzo de la subrutina, creando un bucle infinito.

    Para solucionar esto, puedes agregar un comando jr $ra al final de la subrutina para regresar al código que la llamó.

    Además, asegúrate de llamar correctamente a la subrutina con el comando jal y el nombre de etiqueta correcto.

    ¡Espero que esto te ayude! Avísame si tienes alguna pregunta adicional.

Comments are closed.