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

Assembly 使用相同寄存器的MIPS分支延迟槽和bnez,assembly,mips,Assembly,Mips,我有以下asm MIPS代码: 80031DB8 bnez $v0, loc_80031F58 80031DBC move $v0, $zero 据我所知,“分支不等于零”永远不会跳转到loc_80031F58,因为v0=0,是吗?否。在比较时,$v0在执行80031DB8之前具有任何值。比较之后,当执行延迟时隙并开始进行跳转时,$v0被写入值0 一旦执行或不执行分支,$v0的值为零。也就是说,在开始执行80031F58(当执行分支时)或80031DC0(当未执行分支时),$v

我有以下asm MIPS代码:

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

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

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


一旦执行或不执行分支,
$v0
的值为零。也就是说,在开始执行
80031F58
(当执行分支时)或80031DC0(当未执行分支时),
$v0
0
,但如果执行分支,它之前一定有一个非零值。

感谢您提供了令人敬畏的快速答案。