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

时间:2011-08-01 19:57:56

标签: assembly mips

我有以下asm MIPS代码:

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

据我所知,“branch not equal zero”永远不会跳转到loc_80031F58,因为v0 = 0,是吗?

1 个答案:

答案 0 :(得分:7)

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

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