我刚刚开始学习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;
}
答案 0 :(得分:3)
...但是我可以使用条件吗?
不幸的是。
只有少数CPU(例如与8080兼容(8080,Z80、8085)和ARM)允许基于条件的返回。
您将必须使用一条跳转到beq
指令的jr $ra
指令。