STM指令:
将一组寄存器中的数据存入到栈中,具有四种操作方式:
STMDB、STMDA、STMIB、STMIA
STMIA 目标寄存器,{一组源寄存器}
STMIA R13!,{R0-R1} ;将R0,R1寄存器中的数据存入R13指向的栈空间,完成后将R13的数值更新为当前指向的
栈地址。
相当于 *R13=R0
*(R13+4)=R1
R13=R13+8
STMDB 目标寄存器,{一组源寄存器}
STMDB R13,{R0} 将R0存入R13 完成后R13不改变 *(R13-4)=R0
MRS指令 将XPSR寄存器的数据保存到通用寄存器
MRS R0 ,XPSR ; 即 R0=XPSR
MSR指令 将通用寄存器的数据保存到XPSR寄存器
MSR XPSR,R0 ; 即 XPSR=R0
LDM LDM是LDR指令的增强型 , 将多个连续的数据存入到一组寄存器
有四种操作方式
DB (Decrement Before)栈指针先减小再操作、DA(Decrement After)栈指针先操作再减小
IB(Increment Before)栈指针先增加再操作、IA(Increment After)栈指针先操作再增加
LDMIA R14,{R0-R3,R12} 从LR寄存器指向的栈地址中取出5个32位数据分别存进到R0-R4以及R12 ,即时
R0=*R14
R1=*(R14+4)
R2=*(R14+8)
R3=*(R14+12)
R12=*(R14+16)
LDMIA R1!,{R4-R11} 从R1寄存器指向的地址连续取出8个32位数据存入到R4-R11寄存器中,完成操作之后将R1更新为当前
的栈地址
R4=*R1
R5=*(R1+4)
R6=*(R1+8)
R7=*(R1+12)
R8=*(R1+16)
R9=*(R1+20)
R10=*(R1+24)
R11=*(R1+28)
R1=R1+32
ADD 指令 加法指令
ADD R14,#0x40 将LR寄存器的值与0x40相加,赋予LR R14+=0x40