【问题标题】:ARM BL instruction Calculation, Getting Target Address from OpcodesARM BL指令计算,从操作码获取目标地址
【发布时间】:2018-02-17 13:59:13
【问题描述】:

ARM中Target地址是如何计算的?

01F0D9AC    28 7D CB EB         BL 011ECE54

如何计算地址,所以我们从这些十六进制字节28 7D CB EB中得到地址011ECE54

【问题讨论】:

  • 您需要先分享您正在使用的参考资料,然后才能有人帮助您。它看起来像家庭作业......
  • 仅用于学习目的和修改应用程序而不是家庭作业。
  • 如果您不知道您已经知道什么,我们将无法为您提供太多帮助。你在ARM ARM中找过BL指令的定义吗?
  • 是的 BL 是 BranchLink 等于 call is asm。

标签: arm instructions calculation


【解决方案1】:

ARM 指令操作码的规范参考是相关架构的 ARM 架构参考手册。

您可以从ARM-v8 ARM 查找 BL 的 AArch32 T32 编码。

来自F5.1.25部分,

Branch with Link 调用 PC 相对地址的子程序,并将 LR 设置为返回地址

编码 A1 显示 {cond}{0xB}{imm24}

在下一页,描述了

对于编码 A1:要分支到的指令的标签。汇编程序计算 从 BL 指令的 PC 值到该标签的偏移量的所需值,然后选择一个 将 imm32 设置为该偏移量的编码。 允许的偏移量是 4 的倍数,范围为 –33554432 到 33554428

伪代码描述:

imm32=SignExtend(imm24)

if ConditionPassed() then
EncodingSpecificOperations();
if CurrentInstrSet() == InstrSet_A32 then
    LR = PC - 4;
else
    LR = PC<31:1> : '1';
if targetInstrSet == InstrSet_A32 then
    targetAddress = Align(PC,4) + imm32;
else
    targetAddress = PC + imm32;
SelectInstrSet(targetInstrSet); 

您的第一个挑战是整理反汇编中的字节顺序,知道“AL”(始终或无条件)条件代码是 0b1110。

然后您必须从源列表中取出所有 8 个字节(而不是 4 个)来计算目标地址,但请注意检查 PC 是如何用于计算返回地址的。这在E1.2.3中有详细描述通用寄存器和PC,在AArch32状态

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 2021-11-18
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多