存储器和寄存器交互操作(ARMv8)
1.为什么需要存储器和寄存器交互操作?
- 编程语言中可能有数组和结构体这样复杂的数据结构。处理器只能保存少量数据到寄存器,但是可以存储器中放数十亿数据,因此数据结构存在存储器中。
- LEGv8指令只对寄存器操作,因此必须还得有在寄存器和存储器之间传数据的指令。
2.怎么交互?
- 取数指令:LDUR,将数据从存储器复制到寄存器。
- 存数指令:STUR,将寄存器数据存到存储器中。
- 基址寄存器、偏移量:用来找到存储器指定数据的地址。
3.例子:
变量h存在寄存器X21,数组A基址存在X22,写A[12] = h + A[8]汇编代码:
LDUR X9,[X22,#64]//A[8]放到X9
//偏移量是8*8因为按字节编址,相邻双字地址相差8.
ADD X9,X21,X9STUR X9,[X22,#96]//X9放到A[12]