ARM64的STP指令如何为两个寄存器值分配足够栈空间?
你对ARM64通用寄存器的位宽认知有误:
- ARM64 命名以
X开头的通用整数寄存器均为 64位(8字节),128位的是Q开头的浮点/SIMD向量寄存器。
你列出的STP X0, X1, [SP, #-16]!是预索引写回模式的存储对指令,执行逻辑如下:
- 先将栈指针SP的值减去16,更新为新的栈顶地址
- 将8字节的X0存入新SP偏移0的地址,8字节的X1存入新SP偏移8的地址
两个寄存器总存储占用刚好是16字节,预留的空间完全足够,不存在空间不足的问题。
如果你需要存储两个128位的Q寄存器,才需要预留32字节空间,对应指令为STP Q0, Q1, [SP, #-32]!。
内容的提问来源于stack exchange,提问作者Rodrigo Salazar
相关产品推荐
相关产品推荐

