1. ARM SIMD&FP存储指令概述
在ARMv8-A架构中,SIMD(单指令多数据)和FP(浮点)指令集为高性能计算提供了强大的向量化支持。作为数据处理的关键环节,存储指令负责将寄存器中的计算结果写回内存。STR(Store Register)和STUR(Store Unscaled Register)是其中两种核心的存储指令,它们的设计体现了ARM架构对内存访问效率和安全性的精细考量。
STR指令支持灵活的地址计算方式,允许通过基址寄存器(Xn|SP或Cn|CSP)和偏移寄存器(Wm|Xm)的组合来生成目标地址,并可选地进行位移和符号扩展。这种设计特别适合处理数组、结构体等需要动态计算地址的场景。例如在图像处理中,像素数据的存储往往需要根据行列索引动态计算内存位置。
STUR指令则采用基址加立即数偏移的寻址方式,偏移量范围在-256到255字节之间。这种紧凑的编码格式使得指令长度更短,执行效率更高,适合访问局部变量或对象成员等固定偏移的内存操作。
关键区别:STR的偏移量来自寄存器且可缩放,STUR使用固定的小范围立即数偏移且不可缩放。STR适合动态地址计算,STUR适合静态偏移访问。
2. STR指令深度解析
2.1 指令编码格式
STR指令的编码结构体现了ARM指令集模块化设计的精髓:
code复制size[31:30] | 111[29:27] | 1[26] | 00[25:24] | x[23] | 0[22] | Rm[21:16] |
option[15:13] | S[12] | 10[11:10] | Rn[9:5] | Rt[4:0]
-
size字段(2位):决定操作数大小
- 00:8位(字节)
- 01:16位(半字)
- 10:32位(单字)
- 11:64位(双字)
-
opc字段:与size组合决定数据大小
- 00:与size字段一致
- 10:128位(四字)
-
option字段(3位):控制偏移量的扩展方式
- 010:无符号字扩展(UXTW)
- 110:有符号字扩展(SXTW)
- 111:有符号双字扩展(SXTX)
- 011:逻辑左移(LSL)
2.2 操作数类型与语法
STR指令支持多种SIMD&FP寄
