返回调用者函数MIPS程序集

时间:2019-04-07 20:00:10

标签: assembly branch mips mips32 mips64

我刚刚开始学习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 个答案:

答案 0 :(得分:3)

  

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

不幸的是。

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

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

相关问题