ARM指令的尋址方式

發(fā)布時(shí)間:2024-02-26
所謂尋址方式就是處理器根據(jù)指令中給出的地址信息來(lái)尋找物理地址的方式。目前arm指令系統(tǒng)支持如下幾種常見(jiàn)的尋址方式。
一、立即尋址
立即尋址也叫立即數(shù)尋址,這是一種特殊的尋址方式,操作數(shù)本身就在指令中給出,只要取出指令也就取到了操作數(shù)。這個(gè)操作數(shù)被稱為立即數(shù),對(duì)應(yīng)的尋址方式也就叫做立即尋址。例如以下指令:
add r0,r0,#1 ;r0←r0+1
add r0,r0,#0x3f ;r0←r0+0x3f
在以上兩條指令中,第二個(gè)源操作數(shù)即為立即數(shù),要求以“?!睘榍熬Y,對(duì)于以十六進(jìn)制表示的立即數(shù),還要求在“?!焙蠹由稀?x”或“&”。
二、寄存器尋址
寄存器尋址就是利用寄存器中的數(shù)值作為操作數(shù),這種尋址方式是各類微處理器經(jīng)常采用的一種方式,也是一種執(zhí)行效率較高的尋址方式。以下指令:
add r0,r1,r2 ;r0←r1+r2
該指令的執(zhí)行效果是將寄存器r1和r2的內(nèi)容相加,其結(jié)果存放在寄存器r0中。
三、寄存器間接尋址
寄存器間接尋址就是以寄存器中的值作為操作數(shù)的地址,而操作數(shù)本身存放在存儲(chǔ)器中。例如以下指令:
add r0,r1,[r2] ;r0←r1+[r2]
ldr r0,[r1] ;r0←[r1]
str r0,[r1] ;[r1]←r0
在第一條指令中,以寄存器r2的值作為操作數(shù)的地址,在存儲(chǔ)器中取得一個(gè)操作數(shù)后與r1相加,結(jié)果存入寄存器r0中。
第二條指令將以r1的值為地址的存儲(chǔ)器中的數(shù)據(jù)傳送到r0中。
第三條指令將r0的值傳送到以r1的值為地址的存儲(chǔ)器中。
四、基址變址尋址
基址變址尋址就是將寄存器(該寄存器一般稱作基址寄存器)的內(nèi)容與指令中給出的地址偏移量相加,從而得到一個(gè)操作數(shù)的有效地址。變址尋址方式常用于訪問(wèn)某基地址附近的地址單元。采用變址尋址方式的指令常見(jiàn)有以下幾種形式,如下所示:
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]
在第一條指令中,將寄存器r1的內(nèi)容加上4形成操作數(shù)的有效地址,從而取得操作數(shù)存入寄存器r0中。
在第二條指令中,將寄存器r1的內(nèi)容加上4形成操作數(shù)的有效地址,從而取得操作數(shù)存入寄存器r0中,然后,r1的內(nèi)容自增4個(gè)字節(jié)。
在第三條指令中,以寄存器r1的內(nèi)容作為操作數(shù)的有效地址,從而取得操作數(shù)存入寄存器r0中,然后,r1的內(nèi)容自增4個(gè)字節(jié)。
在第四條指令中,將寄存器r1的內(nèi)容加上寄存器r2的內(nèi)容形成操作數(shù)的有效地址,從而取得操作數(shù)存入寄存器r0中。
五、多寄存器尋址
采用多寄存器尋址方式,一條指令可以完成多個(gè)寄存器值的傳送。這種尋址方式可以用一條指令完成傳送最多16個(gè)通用寄存器的值。以下指令:
ldmia r0,{r1,r2,r3,r4} ;r1←[r0]
;r2←[r0+4]
;r3←[r0+8]
;r4←[r0+12]
該指令的后綴ia表示在每次執(zhí)行完加載/存儲(chǔ)操作后,r0按字長(zhǎng)度增加,因此,指令可將連續(xù)存儲(chǔ)單元的值傳送到r1~r4。
六、相對(duì)尋址
與基址變址尋址方式相類似,相對(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 ;從子程序返回
七、堆棧尋址
堆棧是一種數(shù)據(jù)結(jié)構(gòu),按先進(jìn)后出(first in last out,filo)的方式工作,使用一個(gè)稱作堆棧指針的專用寄存器指示當(dāng)前的操作位置,堆棧指針總是指向棧頂。
當(dāng)堆棧指針指向最后壓入堆棧的數(shù)據(jù)時(shí),稱為滿堆棧(full stack),而當(dāng)堆棧指針指向下一個(gè)將要放入數(shù)據(jù)的空位置時(shí),稱為空堆棧(empty stack)。
同時(shí),根據(jù)堆棧的生成方式,又可以分為遞增堆棧(ascending stack)和遞減堆棧(decending stack),當(dāng)堆棧由低地址向高地址生成時(shí),稱為遞增堆棧,當(dāng)堆棧由高地址向低地址生成時(shí),稱為遞減堆棧。這樣就有四種類型的堆棧工作方式,arm微處理器支持這四種類型的堆棧工作方式,即:
- 滿遞增堆棧:堆棧指針指向最后壓入的數(shù)據(jù),且由低地址向高地址生成。
- 滿遞減堆棧:堆棧指針指向最后壓入的數(shù)據(jù),且由高地址向低地址生成。
- 空遞增堆棧:堆棧指針指向下一個(gè)將要放入數(shù)據(jù)的空位置,且由低地址向高地址生成。
- 空遞減堆棧:堆棧指針指向下一個(gè)將要放入數(shù)據(jù)的空位置,且由高地址向低地址生成。
上一個(gè):這個(gè)網(wǎng)站剛才解析了打不開(kāi)啊
下一個(gè):飛飛一鍵重裝可靠嗎-(飛飛一鍵端)

不能混施的肥料
監(jiān)理是否應(yīng)該承擔(dān)安全事故責(zé)任?你怎么看?
變頻變速攪拌機(jī)概述
訴訟離婚開(kāi)庭多久判決
cad圖如何轉(zhuǎn)換成jpg格式(如何將cad圖轉(zhuǎn)換成jpg格式)
專項(xiàng)施工方案編寫的要點(diǎn)有哪些?
早實(shí)核桃苗木適用樹(shù)形有哪幾種?
怎么將手機(jī)投屏到win10電腦上去(怎么將手機(jī)投屏到win10電腦上看)
選擇沃a云服務(wù)器ecs您可以輕松構(gòu)建
電腦加裝風(fēng)扇對(duì)電源有要求嗎(電腦加風(fēng)扇電源線)
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos