STR 写
LDR 读
STM 写多个
LDM 读多个
IA,IB 后增,前增
DA,DB 后减,前减
STMFD(入栈)与STMDB(入栈:先减后存)效果相同
LDMFD(出栈)与STMIA(出栈:先读后增)效果相同
MOV R1, #1
MOV R2, #2
MOV R3, #3
MOV R0, #0x20000
STMIA R0, {R1-R3} ; R1,R2,R3分别存入R0,R0+4,R0+8地址处
ADD R0, R0, #0x10
STMIA R0!, {R1-R3} ; R1,R2,R3分别存入R0,R0+4,R0+8地址处, R0=R0+3*4
示例代码:下面的代码就是入栈和出栈的操作代码。
MOV R1, #1
MOV R2, #2
MOV R3, #3
MOV SP, #0x20000
STMFD SP!, {R1-R3} ; R3,R2,R1分别存入SP-4,SP-8,SP-12地址处, SP=SP-12
MOV R1, #0
MOV R2, #0
MOV R3, #0
LDMFD SP!, {R1-R3} ; R1,R2,R3分别得到SP,SP+4,SP+8地址处的值, SP=SP+12
基础的操作语法
MOV R0, #0x20000
MOV R1, #0x10
MOV R2, #0x12
STR R2, [R0] ; R2的值存到R0所示地址
STR R2, [R0, #4] ; R2的值存到R0+4所示地址
STR R2, [R0, #8]! ; R2的值存到R0+8所示地址, R0=R0+8
STR R2, [R0, R1] ; R2的值存到R0+R1所示地址
STR R2, [R0, R1, LSL #4] ; R2的值存到R0+(R1<<4)所示地址
STR R2, [R0], #0X20 ; R2的值存到R0所示地址, R0=R0+0x20
MOV R2, #0x34
STR R2, [R0] ; R2的值存到R0所示地址
LDR R3, [R0], +R1, LSL #1 ; R3的值等于R0所示地址上的值,R0=R0+(R1<<1)