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

Riz*_*Riz 4 assembly mips

我有以下asm MIPS代码:

80031DB8  bnez    $v0, loc_80031F58
80031DBC  move    $v0, $zero
Run Code Online (Sandbox Code Playgroud)

据我所知,"分支不等于零"永远不会跳转到loc_80031F58,因为v0 = 0,是吗?

Hea*_*utt 7

不.在比较时,$v0执行之前有任何价值80031DB8.在比较之后,当执行延迟槽并开始跳转时,$v0写入该值0.

一旦采取或不采取分支,$v0值为零.也就是说,在开始执行任何80031F58(当分支转移)或80031DC0(当没有采取分支),$v0将是0,尽管如果分支,它必须以前有一个非零值.