汇编指令记录

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



猜你喜欢

转载自blog.csdn.net/dxianping/article/details/80297344
今日推荐