我正在尝试创建一个操作码来跳转到一个地址。
我查看了手册,我看到:
B<c> <label>
31 30 29 28 | 27 26 25 24 | 23 ................. 0
cond 1 0 1 0 imm24
我不明白什么
cond
和 imm24
是。我将如何创建一个操作码来分支到某个地址,例如分支到 0xbeffffbc
?
最佳答案
B
是高达 +/-32MB 的相对分支。立即数编码目标地址相对于当前 PC 的有符号偏移量(即这条指令 + 8)——注意这个偏移量是按字数计算的,而不是字节数;由于指令总是字对齐的,任何偏移量的底部两位将始终为 00,因此在编码中是隐式的。cond
与大多数其他 ARM 指令中的谓词字段相同。如果您已经到了探索指令编码的地步,您可能应该已经意识到这一点 - ARM ARM 的“条件执行”部分(我手头的 v7A/R 版本中的 A8.3 部分)有完整的细节。
ARM ARM 的典型烦恼是,虽然在指令描述中描述了编码字段和它们所代表的值,但有时您确实必须交叉引用伪代码才能确切了解发生了什么。
关于assembly - 有人可以解释一下 ARM 中的分支操作码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29737035/