彙編指令記錄
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