跳过 mips32 中的下一条指令

穆斯塔法·阿尔迪拉蒂

假设我想在 MIPS 中开发一个伪指令,在我调用此跳过指令 say 后跳过下一条指令skip $s0

我想也许我可以使用$jron $s0,但我需要更改$s0.

我该如何解决这个问题?

阿兰·梅里戈

我想在 MIPS 中开发一个跳过下一条指令的伪指令

更简单的方法是使用始终经过验证的“分支”。

beqc $0,$0,2

将替换PCPC+(2*4)if $0==$0 (即始终)并跳过下一条指令。

这是一个经常用来处理 if-then-else 的技巧

if(a1)
   a2=3;
else
   a3=4;
      beqc  $a1, $0, else
      addi $a2, $0, 3
      beqc  $0,  $0, 2 ; go to end of if then else
else: addi $a3, $0, 4
      # end of if-then else

beqc是 mips64-v6 中引入的无延迟分支(以及许多其他具有零延迟槽的分支/跳转)。

使用旧版本的 mips ISA,不可能跳过下一条指令,因为所有分支都执行以下指令。跳过第二条指令,思路是一样的。

beq $0,$0,2       ; delayed branch. execute next instruction and if test 
                  ;   is true (ie always) go to pc+4+2*4
add $0, $0, $0    ; aka nop (because of the delay slot)
xxx $a1, $a2, $a3 ; this instruction will be skipped
yyy $t1, $t2, $t3 ; and this instruction will be executed

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在mips32中打印沙漏

来自分类Dev

在junit测试中跳过一条线

来自分类Dev

MIPS32 Stackframe损坏了吗?

来自分类Dev

批量插入:是否有一种方法可以在违反约束时仅跳过下一条记录?

来自分类Dev

为什么 GCC 会产生跳转以跳过一条廉价指令,这是否有充分的理由?

来自分类Dev

插入跳过记录集中的最后一条记录

来自分类Dev

跳过一条记录并使用以前的记录数据

来自分类Dev

相对结果集跳过Java / Access中的最后一条记录

来自分类Dev

提取地址未在字边界上对齐,MIPS32

来自分类Dev

跳过一条路线,使其在Sencha Touch 2历史记录导航中不再被记住

来自分类Dev

跳过第一条关于剔除自定义绑定的更新

来自分类Dev

SQL INSERT奇怪地跳过了第一条记录

来自分类Dev

如何使用sql-loader跳过最后一条记录?

来自分类Dev

Python确实会隐藏一条线并跳过调用函数

来自分类Dev

跳过第一条关于剔除自定义绑定的更新

来自分类Dev

从VS Code附加到NodeJS流程会跳过第一条语句

来自分类Dev

如何使用sql-loader跳过最后一条记录?

来自分类Dev

gcc生成“ call”到下一条指令的地址

来自分类Dev

在宏中跳过2

来自分类Dev

Bash在中跳过迭代

来自分类Dev

跳过sed中的模式

来自分类Dev

跳过Python中的if语句

来自分类Dev

跳过python中的异常

来自分类Dev

跳过QDomDocument中的注释

来自分类Dev

TwiML中的记录被跳过

来自分类Dev

Bash在中跳过迭代

来自分类Dev

跳过子表中的记录

来自分类Dev

在python中跳过行

来自分类Dev

在IfStatements中跳过语句