我有以下 asm MIPS 代码:
80031DB8 bnez $v0, loc_80031F58
80031DBC move $v0, $zero
据我了解,“分支不等于0”永远不会跳转到loc_80031F58,因为v0 = 0,对吗?
最佳答案
没有。比较时,$v0
具有执行 80031DB8
之前的任何值。比较后,当延迟槽执行并且开始进行跳转时,$v0
被写入值0
。
一旦分支被采用或不被采用,$v0
的值为零。也就是说,在开始执行 80031F58
(当分支被采用时)或 80031DC0(当分支未被采用时)时,$v0
将是 0
,尽管如果分支被采用,它之前必须有一个非零值。
关于assembly - MIPS 分支延迟槽和 bnez 使用相同的寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6903709/