如何计算目标地址?
01F0D9AC 28 7D CB EB BL 011ECE54
如何计算地址,因此我们从这些HEX字节 28 7D CB EB ?
ARM指令OPCODE的规范参考是相关体系结构的ARM架构参考手册。
从ARM-V8 ARM中,您可以查找aarch32 t32编码bl。
从 f5.1.25 ,
带有链接的分支机构调用PC相关地址的子例程,然后将LR设置为返回地址
编码A1显示{cond} {0xb} {imm24}
在下一页上,< label>描述:
用于编码A1:要分支到的指令的标签。汇编器计算从BL指令的PC值到此标签的偏移值的要求值,然后选择一个编码将IMM32设置为该偏移的编码。允许的偏移量是–33554432至33554428
在范围内4的倍数
伪代码描述:
inm32 = 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 State