我有以下asm MIPS代码:
80031DB8 bnez $v0, loc_80031F58
80031DBC move $v0, $zero
据我所知,“branch not equal zero”永远不会跳转到loc_80031F58,因为v0 = 0,是吗?
答案 0 :(得分:7)
没有。在比较时,$v0
在执行80031DB8
之前具有任何值。比较之后,当执行延迟槽并开始跳转时,$v0
将写入值0
。
一旦采取或不采取分支,$v0
的值为零。也就是说,在开始执行80031F58
(采用分支时)或80031DC0(不采用分支时)时,$v0
将为0
,尽管如果分支如果采用它,它之前必须具有非零值。