【发布时间】:2018-07-08 16:44:05
【问题描述】:
我在理解此代码中的指令顺序时遇到了一些问题。假设 beqz 为真,它分支到下一个标签,程序是在那里结束还是标签 next2 也执行?由于没有系统调用来结束程序。
add $t0,$t1,$t2
beqz $t0, next
b next2
addi $t0,$t0,2
next:
addi $t2,$t0,3
next2:
addi $t1,$t1,2
【问题讨论】:
-
"程序到此结束了吗?"没有。"或者label next2也执行了?"是的。
-
您的示例还有另一个问题:如果分支指令紧跟在另一条指令之后(
b跟在beqz之后),则 MIPS CPU 的结果未定义。至少 MIPS R4000 CPU 的手册是这么说的。在这种情况下,通常汇编程序会在跳转之间隐式添加nop指令。 -
@Michael 好的,谢谢,我想我知道了。添加后它返回到 beqz,再次检查,但现在它是错误的,所以它转到 next2,进行加法,然后转到 b next2 下面的加法,然后结束。
-
@MartinRosenau 谢谢指正,这只是课堂上的一个例子,你可以责怪我的教授哈哈
-
@MartinRosenau:根据我的经验,在学术界教授 MIPS 汇编时,他们倾向于使用 SPIM 或 MARS 等模拟器。这些默认情况下禁用了延迟分支,可能是为了让学生的事情变得不那么复杂。