0

我刚刚开始学习 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;
}
4

1 回答 1

3

...但是我可以使用条件来调用它吗?

抱歉不行。

只有少数 CPU(如 8080 兼容的(8080、Z80、8085)和 ARM)允许基于条件的返回。

您必须使用beq跳转到指令的jr $ra指令。

于 2019-04-07T20:21:34.357 回答