【问题标题】:Explain arm64 instruction STP讲解arm64指令STP
【发布时间】:2020-11-02 01:13:50
【问题描述】:

我正在阅读源代码并找到以下说明,但我不明白它的作用。 有人可以帮我理解吗?

stp x19, x20, [x8], #16

如果stp x19, x20, [x8]我能理解就好了。

【问题讨论】:

    标签: arm64


    【解决方案1】:

    它被称为“后索引”变体,它在存储后修改地址。
    以下两个是等价的:

    stp x19, x20, [x8], #16
    
    stp x19, x20, [x8]
    add x8, x8, #16
    

    还有一个 pre-index 变体修改了地址 before 存储。
    同样,这两个是等价的:

    stp x19, x20, [x8, #16]!
    
    add x8, x8, #16
    stp x19, x20, [x8]
    

    根据我的经验,这最常用于推送和弹出堆栈帧,如下所示:

    some_func:
        stp x29, x30, [sp, #-0x10]!
        // ...
        ldp x29, x30, [sp], #0x10
        ret
    

    大多数形式的单寄存器ldrstr 也有这些变体,有关更多信息,请参阅ARMv8 Reference Manual 中的C1.3.3 节(“加载/存储寻址模式”)。

    【讨论】:

    • 我想您可能想要在上一个示例中的stp 上添加!? (我真的不知道他们为什么要把这种语法弄得这么讨厌。)
    • @NateEldredge 不错,我愿意。一次又一次地吸引我,叹息。
    猜你喜欢
    • 2021-12-30
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    • 2017-01-09
    • 2011-12-21
    • 2017-01-20
    • 2019-04-16
    • 2013-01-24
    相关资源
    最近更新 更多