我有 2 个 armv7-m (Thumb) 分支指令(十六进制),它们调用一个函数。你能告诉我如何计算这个函数的偏移量,以便我可以在其他位置调用它。
谢谢!
偏移量 0020922A - 十六进制:07 F6 6C FE
偏移量 0020941A - 十六进制:07 F6 74 FD
我已经想出了如何计算它:
- 所以我们有 07 F6 6C FE(arm - little endian) -> F6 07 | 铁 6C
- F6 07 | FE 6C = 1111 0110 0000 0111 | 1111 1110 0110 1100
- 看5.19(ece.uwaterloo.ca/~ece222/ARM/ARM7-TDMI-manual-pt3.pdf)我们会发现如何获取操作码:
- 上半年 F6 07 = 1111 0110 0000 0111 = F000 + 607
- 下半年FE 6C = 1111 1110 0110 1100 = F800 + 66C
- 66C << 1 = 110011011000 = CD8 => 偏移量 = 607CD8
- 这是正确的吗?所以我们测试它:Offset 0020941A - Hex: 07 F6 74 FD
- 在这种情况下,我们的偏移量为:607CD8 - (0020941A - 0020922A) = 607AE8
- 新分支指令 = F000 + 607 | F800 + (AE8 >> 1)
- AE8 = 101011101000 -> 10101110100 = 574 => F6 07 FD 74 :D/