新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM裸機(jī)開(kāi)發(fā)筆記4ARM尋址方式

ARM裸機(jī)開(kāi)發(fā)筆記4ARM尋址方式

作者: 時(shí)間:2016-11-19 來(lái)源:網(wǎng)絡(luò) 收藏
所謂尋址方式就是處理器根據(jù)指令中給出的地址信息來(lái)尋找物理地址的方式。

本文引用地址:http://m.butianyuan.cn/article/201611/318202.htm

立即(數(shù))尋址

操作數(shù)本身就在指令中給出,只要取出指令也就取到了操作數(shù)。這個(gè)操作數(shù)被稱為立即數(shù),對(duì)應(yīng)的尋址方式為立即尋址

ADD R0,R0,#1 ;R0<-R0+1

ADD R0,R0,#ox3f ;R0<-R0+0x3f

以上指令中,第二個(gè)源操作數(shù)即為立即數(shù)。立即數(shù)以#開(kāi)頭

寄存器尋址

利用寄存器中的數(shù)值作為操作數(shù),這種尋址方式是各類微處理器經(jīng)常采用的一種方式,也是一種執(zhí)行效率較高的尋址方式。

ADD R0,R1,R2 :R0<-R1+R2

該指令將寄存器R1和R2的內(nèi)容相加放到R0中。

寄存器間接尋址

以寄存器中的值作為操作數(shù)的地址,而操作數(shù)本身存放在存儲(chǔ)器中

ADD R0,R1,[R2] ;R0<-R1+[R2]

LDR R0,[R1] ;R0<-[R1]

[]表示取寄存器內(nèi)容處的存儲(chǔ)器的值

基址變址尋址方式

將寄存器(該寄存器一般稱作基址寄存器)的內(nèi)容與指令中給出的地址偏移量相加,從而得到一個(gè)操作數(shù)的有效地址:

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]

多寄存器尋址

一條指令可以完成多個(gè)寄存器值的傳送。一條指令完成傳送最多16個(gè)通用寄存器的值

LDMIA R0,{R1,R2,R3,R4} ;R1<- [R0] R2<-[R0+4] R3<-[R0+8] R4<-[R0+12]

IA表示每次執(zhí)行完加載操作后,R0按字長(zhǎng)度增加

相對(duì)尋址

以程序計(jì)數(shù)器PC的當(dāng)前值為基地址,指令中的地址標(biāo)號(hào)作為偏移量,將兩者相加之后得到操作數(shù)的有效地址。

以下程序段完成子程序的調(diào)用和返回,跳轉(zhuǎn)指令BL采用了相對(duì)尋址方式:

BL NEXT ;跳轉(zhuǎn)到子程序NEXT處執(zhí)行

·····················

NEXT

··························

MOV PC,LR ;從子程序返回

椎棧尋址

椎棧指針總是指向棧頂

遞增椎棧:向高地址方向生長(zhǎng)

遞減椎棧:向低地址方向生長(zhǎng)

滿椎棧:椎棧指針指向最后壓入椎棧的有效數(shù)據(jù)項(xiàng)

空椎棧:椎棧指針指向下一個(gè)要放入數(shù)據(jù)的空位置



關(guān)鍵詞: ARM裸機(jī)尋址方

評(píng)論


技術(shù)專區(qū)

關(guān)閉