use*_*481 4 assembly arm opcode armv7
我正在尝试创建一个操作码来跳转到一个地址.
我查看了手册,我看到:
B<c> <label>
31 30 29 28 | 27 26 25 24 | 23 ................. 0
cond 1 0 1 0 imm24
Run Code Online (Sandbox Code Playgroud)
我不明白什么cond
和imm24
有.我如何创建一个操作码来分支到某个地址,例如分支到0xbeffffbc
?
B
是一个高达+/- 32MB 的相对分支.立即对当前PC的目标地址的有符号偏移进行编码(即该指令+8) - 注意该偏移量是以字为单位计算的,而非字节数; 由于指令始终是字对齐的,因此任何偏移的底部两位始终为00,因此在编码中隐含.
cond
与大多数其他ARM指令中的谓词字段相同.如果你已经开始探讨指令编码了,你可能应该知道这一点 - ARM ARM的"条件执行"部分(我方便的v7A/R版本的A8.3部分)已经完成了细节.
与ARM公司的典型烦恼的是,虽然编码字段和它们所代表的价值是在指令说明中描述,你有时不得不交叉引用的伪代码,以弄清楚到底是怎么回事.