Вернуться к функции вызова MIPS сборки - PullRequest
0 голосов
/ 07 апреля 2019

Я только начал изучать сборку MIPS и не могу понять, как условно вернуться к процедуре caller.Пример прояснит мой вопрос.У меня есть процедура caller, которая что-то делает перед вызовом multiply, я хочу, чтобы эта процедура выполнялась other things после завершения multiply.Я знаю, как использовать условия для перехода к меткам, но вместо beq $t3, 80, caller я хочу вернуться к caller сразу после jal multiply.Я знаю, что для возврата вы должны использовать jr $ra, но я могу назвать его, используя условие?

caller:
    doing_somehing
    jal multiply
    other_things    

multiply:
    beq $t3, 80, caller

    lw $t4, array($t3)
    mul $t4, $t4, $t1
    sw $t4, array($t3)

    addi $t3, $t3, 4
    j multiply

Сборка должна вести себя так, как этот код C:

void caller()
{
    doing_something();
    multily();
    other_things();
}

void multiply()
{
    int i = 0;
    while (i < 80)
    {
        someUnrelated();
        i += 4;
    }
    return;
}

1 Ответ

3 голосов
/ 07 апреля 2019

... но можно ли назвать это с помощью условия?

К сожалению, нет.

Только несколько процессоров (например, 8080-совместимых (8080, Z80, 8085) и ARM) допускают возврат на основе условий.

Вам придется использовать инструкцию beq, которая переходит к инструкции jr $ra.

...