gpt4 book ai didi

assembly - MIPS 程序集返回调用分支语句

转载 作者:行者123 更新时间:2023-12-04 00:06:32 25 4
gpt4 key购买 nike

我有:

CODE

beq $s3, 1, option1
beq $s3, 0, option2


MORE CODE

option1:
code
jr $ra????

option2:
code
jr $ra

我正在尝试测试 s3 是 0 还是 1 并运行不同的代码块(输出字符串),然后从第二个 beq 之后立即继续执行其余代码

如果我在每个语句中都使用 jr $ra,我会得到一个无限循环。如果我在没有这些的情况下执行此操作,它会运行这两个语句,然后跳过其余的代码块并继续执行下一个函数..

我怎样才能做一个分支语句,当它完成后会让我回到它?

最佳答案

要使用跳转返回 (jr) 指令,您必须首先使用跳转和链接指令 (jal) 进行跳转。该指令在跳转到代码的另一部分之前保存位于 $ra 寄存器中的程序计数器。这样,当 jr 被调用时,CPU 就知道要返回代码的哪一部分了。

标准分支指令(如 beq)不保存程序计数器,因此当您意外调用 jr 时,CPU 不知道要返回代码的哪一部分。这就是为什么当你调用 jr 时你的代码会进入循环。

或者,您也可以避免一起链接跳跃:

CODE

beq $s3, 1, option1
option1_ret:

beq $s3, 0, option2
option2_ret:

MORE CODE

option1:
code
j option1_ret

option2:
code
j option2_ret

关于assembly - MIPS 程序集返回调用分支语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40559802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com