微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

解释arm64指令STP

如何解决解释arm64指令STP

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

stp x19,x20,[x8],#16

如果只有stp x19,[x8]我能理解。

解决方法

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

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

还有一个预索引变体,修改了存储之前 的地址。
同样,这两个是等效的:

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

根据我的经验,这最常用来推动和弹出堆栈框架,如下所示:

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。