Embedded ARM BLX指令范围(绝对)

Embedded ARM BLX指令范围(绝对),embedded,arm,Embedded,Arm,我有一个关于ARM BLX指令的问题,特别是关于BLX RX指令。ARM手册中规定,对于BLX标签,标签应在32MB范围内。在我的代码中,我将R0寄存器设置为指向address1。我的当前地址与address1(目标地址)之间的距离约为0x05000000 当我到达指令时,它崩溃了(address1中的代码是ARM,因此T模式没有问题)。对BLX使用绝对值时有任何限制吗?我应该用饰板吗 谢谢 您可以使用任何地址作为BLX RX格式的RX寄存器。它将执行arm中描述的操作 if Condition

我有一个关于ARM BLX指令的问题,特别是关于BLX RX指令。ARM手册中规定,对于BLX标签,标签应在32MB范围内。在我的代码中,我将R0寄存器设置为指向address1。我的当前地址与address1(目标地址)之间的距离约为0x05000000

当我到达指令时,它崩溃了(address1中的代码是ARM,因此T模式没有问题)。对BLX使用绝对值时有任何限制吗?我应该用饰板吗


谢谢

您可以使用任何地址作为BLX RX格式的RX寄存器。它将执行arm中描述的操作

if ConditionPassed(cond) then target = Rm LR = address of instruction after the BLX instruction CPSR T bit = target[0] PC = target AND 0xFFFFFFFE 如果条件通过(cond),则 目标=Rm LR=BLX指令后的指令地址 CPSR T位=目标[0] PC=目标和0xFFFFFE 如果所有代码、调用或被调用的代码都不是thumb模式,那么您可能很好,在这种情况下,请确保您提供的地址的lsbit为零。实际上,您需要在0x05000000处有代码,并且需要是用于处理分支链接的代码,这意味着如果它进行更多bl样式的调用,它将维护链接寄存器(r14)。同样,如果您在从其他人调用的函数中进行此blx调用,则需要在进行blx调用之前保留r14并恢复r14,或者在从函数返回时执行任何操作以将该值放回r15(pc)


反汇编/objdump清单中的代码示例或代码片段将有助于进一步帮助您解决此问题。包含blx和被调用代码的代码。

限制仅适用于PC相对分支(偏移量在指令中编码),而不适用于寄存器分支

所以坠机的原因是另外一个原因。你的处理器是什么?“address1”上有代码吗?它到底在哪里坠毁