gpt4 book ai didi

assembly - PC寄存器上的ARM LDR指令

转载 作者:行者123 更新时间:2023-12-02 21:45:37 24 4
gpt4 key购买 nike

这是我对这个故事的理解:

  • PC 寄存器保存指向下一条指令的指针
  • LDR指令正在将第二个操作数的值加载到第一个操作数中(例如)
    LDR r0, [pc, 0x5678]
    相当于这个“C 代码”
    r0 = *(pc + 0x5678)
    这是带有基偏移量的指针解引用。

我的问题:

我找到了这段代码

LDR PC, [PC,-4]

它的评论就像猴子补丁等..

我如何理解这段代码

pc = *(pc - 4)

在这种情况下,“pc”寄存器将取消引用前一条指令的地址,并将包含指令的“机器代码”(不是指令的地址),并且程序将跳转到该无效地址继续执行,并且可能我们会得到“段错误”。那么我缺少或不理解什么?



让我想到的是LDR指令中第二个操作数的括号。据我所知,在 x86 架构上括号已经取消引用指针,但我无法理解 ARM 架构中的含义。

mov r1, 0x5678add r1, pcmov r0, [r1]

这段代码相当于吗?

LDR r0, [pc, 0x5678]

最佳答案

引用ARM指令集文档(ARM DDI 0029E)的第4.9.4节:

When using R15 as the base register you must remember it contains an address 8 bytes on from the address of the current instruction.

因此该指令将加载位于当前指令之后 4 个字节的字,该字有望包含有效地址。

关于assembly - PC寄存器上的ARM LDR指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24115899/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com