MIPS分支延迟槽和使用同一寄存器的bnez

4
我有以下 MIPS 汇编代码:

80031DB8  bnez    $v0, loc_80031F58
80031DBC  move    $v0, $zero

据我所知,“分支不等于零”永远不会跳转到loc_80031F58,因为v0 = 0,是这样吗?
1个回答

7

在比较时,$v0具有执行80031DB8之前的任何值。比较后,在延迟槽执行并开始跳转时,$v0被写入值0

一旦分支被采取或未采取,$v0的值为零。也就是说,在执行80031F58(当分支被采取时)或80031DC0(当分支未被采取时)的开头,$v0将为0,尽管如果分支被采取,它必须先前具有非零值。


感谢您出色而快速的回答。 - Riz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接