Застрял в бесконечном цикле, используя JAL

main:

    jal function1

  #Exit Program
    li $v0, 10
    syscall

function1:

    li $s0, 0
    jal function2

    jr $ra 

function2:

    jal external_function
    beq $s0, 5, function2_end

    #Run loop 5 times
    addi $s0, $s0, 1

function2_end:
    jr $ra

external_function:
    #Does random operation
    jr $ra

Так что это всего лишь пример проблемы того, что я имею с MIPS. Я застрял в бесконечном цикле, потому что function2_end будет продолжать переходить к external_function.

Есть ли способ заставить function2_end перейти назад к function1, чтобы он мог выйти из цикла?

1 ответ

jal сохраняет ценность $ra, перезаписывая любое предыдущее значение. Что вы хотите сделать, это сохранить $ra в стек, когда это необходимо, а затем вставьте его, когда захотите.

Другие вопросы по тегам