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

标签 assembly mips

我有以下 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/

相关文章:

assembly - Near call/jump 表并不总是在引导加载程序中工作

windows - 使用预取队列的反调试不适用于我的 cpu

c - 关于查找斐波那契数的 MIPS 代码有什么问题?

linux - usbip 不适用于 OpenWRT

linux - 将内存与自定义 ELF 文件一起使用时出现段错误

c - 当按下输入时禁用/启用中断(时间)

GCC MIPS-32 调用约定/堆栈帧定义

assembly - MIPS中rem和mfhi的区别

将 C 代码编译为 MIPS 程序集

c - 如何在较新的 Linux 内核中挂接 sys_clone