在ARM架构中,Load/Store指令用于在处理器寄存器与内存之间传输数据。这类指令分为两类:Load指令用于从内存读取数据到寄存器;Store指令用于将寄存器中的数据写入内存。
### Load指令:
Load指令用于从内存地址加载数据到寄存器,如:
1. **LDR (Load Register)**:
- 从内存加载一个32位字到寄存器。
```assembly
LDR R0, [R1] ; 将存储在R1指向的内存地址中的32位数据加载到R0寄存器
```
2. **LDRB (Load Register Byte)**:
- 从内存加载一个8位字节到寄存器,低位字节会被扩展到整个寄存器。
```assembly
LDRB R0, [R1] ; 从R1指向的内存地址加载一个8位字节到R0的最低字节位置,高位字节填充为未知值
```
3. **LDRH/LDRSH (Load Register Halfword/Load Signed Halfword)**:
- 从内存加载16位半字到寄存器,根据指令扩展到32位。
```assembly
LDRH R0, [R1] ; 加载无符号16位半字到R0,高位字节填充为未知值
LDRSH R0, [R1] ; 加载有符号16位半字到R0,高位字节根据符号位扩展
```
### Store指令:
Store指令用于将寄存器中的数据写入到内存地址,如:
1. **STR (Store Register)**:
- 将寄存器中的数据存储到内存地址。
```assembly
STR R0, [R1] ; 将R0寄存器中的32位数据存储到R1指向的内存地址
```
2. **STRB (Store Register Byte)**:
- 将寄存器的最低字节存储到内存地址。
```assembly
STRB R0, [R1] ; 将R0寄存器的最低8位字节存储到R1指向的内存地址
```
3. **STRH (Store Register Halfword)**:
- 将寄存器的16位数据存储到内存地址。
```assembly
STRH R0, [R1] ; 将R0寄存器的16位数据存储到R1指向的内存地址
```
这些指令有时还会有后缀P(表示带有前缀的寻址方式,如LDRP/STRP),或者后缀T(表示Thumb指令集版本,如LDRBT/STRBT)。另外,ARM指令集还包括了一些变体,如带有立即数偏移的寻址方式、基址加偏移量寻址等。在实际应用中,程序员会根据需要选择合适的Load/Store指令以高效安全地管理内存数据。