ARM裸機開發筆記4ARM尋址方式
立即(數)尋址
操作數本身就在指令中給出,只要取出指令也就取到了操作數。這個操作數被稱為立即數,對應的尋址方式為立即尋址
ADD R0,R0,#1 ;R0<-R0+1
ADD R0,R0,#ox3f ;R0<-R0+0x3f
以上指令中,第二個源操作數即為立即數。立即數以#開頭
寄存器尋址
利用寄存器中的數值作為操作數,這種尋址方式是各類微處理器經常采用的一種方式,也是一種執行效率較高的尋址方式。
ADD R0,R1,R2 :R0<-R1+R2
該指令將寄存器R1和R2的內容相加放到R0中。
寄存器間接尋址
以寄存器中的值作為操作數的地址,而操作數本身存放在存儲器中
ADD R0,R1,[R2] ;R0<-R1+[R2]
LDR R0,[R1] ;R0<-[R1]
[]表示取寄存器內容處的存儲器的值
基址變址尋址方式
將寄存器(該寄存器一般稱作基址寄存器)的內容與指令中給出的地址偏移量相加,從而得到一個操作數的有效地址:
LDR R0,[R1,#4] ;R0<- [R1+4]
LDR R0,[R1,#4]! ;R0<- [R1+4], R1<- R1+4
LDR R0,[R1],#4 ;R0<- [R1], R1<- R1+4
LDR R0,[R1,R2] ;R0<-[R1+R2]
多寄存器尋址
一條指令可以完成多個寄存器值的傳送。一條指令完成傳送最多16個通用寄存器的值
LDMIA R0,{R1,R2,R3,R4} ;R1<- [R0] R2<-[R0+4] R3<-[R0+8] R4<-[R0+12]
IA表示每次執行完加載操作后,R0按字長度增加
相對尋址
以程序計數器PC的當前值為基地址,指令中的地址標號作為偏移量,將兩者相加之后得到操作數的有效地址。
以下程序段完成子程序的調用和返回,跳轉指令BL采用了相對尋址方式:
BL NEXT ;跳轉到子程序NEXT處執行
·····················
NEXT
··························
MOV PC,LR ;從子程序返回
椎棧尋址
椎棧指針總是指向棧頂
遞增椎棧:向高地址方向生長
遞減椎棧:向低地址方向生長
滿椎棧:椎棧指針指向最后壓入椎棧的有效數據項
空椎棧:椎棧指針指向下一個要放入數據的空位置


評論