ARM 處理器定址方式

2021-05-27 19:47:25 字數 2791 閱讀 1604

2007-10-26 13:35

arm 處理器定址方式

定址方式是根據指令中給出的位址碼欄位來實現尋找真實運算元位址的方式,arm處理器有 9 種基本定址方式。

1、暫存器定址

mov r1,r2   ;r2 -> r1

sub r0,r1,r2 ;r1 - r2 -> r0

指令執行時直接取出暫存器值操作。

2、立即定址

subs r0,r0,#1;r0 – 1 -> r0

mov r0,#0xff00 ;0xff00 -> r0

資料就包含在指令當中,取出指令也就取出了可以立即使用的運算元。

立即數要以「#」為字首,表示 16 進製數值時以「0x」表示。

3、暫存器偏移定址

mov r0,r2,lsl #3    ;r2 的值左移 3 位,結果放入 r0,即 r0 = r2 * 8

ands r1,r1,r2,lsl r3 ;r2 的值左移 r3 位,然後和 r1 相與操作, 結果放入 r1

暫存器偏移定址是 arm 指令集特有的定址方式,當第 2 運算元是暫存器偏移方式時,第 2 個暫存器運算元在與第 1 個運算元結合之前,選擇進行移位操作。

可採用的移位操作如下:

lsl:邏輯左移(logical shift left),暫存器中字的低端空出的位補 0

lsr:邏輯右移(logical shift right),暫存器中字的高階空出的位補 0

asr:算術右移(arithmetic shift right),移位過程中保持符號位不變,即如果源運算元為正數,則字的高階空出的位補 0,否則補 1

ror:迴圈右移(rotate right),由字的低端移出的位填入字的高階空出的位

rrx:帶擴充套件的迴圈右移(rotate right extended by 1place),運算元右移一位,高階空出的位用原 c 標誌值填充。

4、暫存器間接定址

ldr r1,[r2]   ;將 r2 中的數值作為位址,取出此位址中的資料儲存在 r1 中

swp r1,r1,[r2];將如r2中的數值作為位址,取出此位址中的數值與 r1 中的值交換

指令中的位址碼給出的是乙個通用暫存器編號,所需要的運算元儲存在暫存器指定位址的儲存單元中,即暫存器為運算元的位址指標。

5、基址定址

ldr r2,[r3,#0x0f];將 r3 中的數值加 0x0f 作為位址,取出此位址的數值儲存在 r2 中

str r1,[r0,#-2] ;將 r0 中的數值減 2 作為位址,把 r1 中的內容儲存到此位址位置

基址定址是將基址暫存器的內容與指令中給出的偏移量相加,形成運算元的有效位址,基址定址用於訪問基址附近的儲存單元,常用於查表,陣列操作,功能部件暫存器訪問等。

6、多暫存器定址

ldmia r1!,;將 r1 單元中的資料讀出到 r2-r7,r12,r1 自動加 1

stmia r0!,;將 r3-r6,r10 中的資料儲存到 r0 指向的位址,r0 自動加 1

多暫存器定址就是一次可以傳送幾個暫存器值,允許一條指令傳送 16 個暫存器的任何子集或所有暫存器。

使用多暫存器定址指令時,暫存器子集的順序時由小到大的順序排列,連續的暫存器可用「-」連線,否則,用「,」分隔書寫。

7、堆疊定址

stmfd sp!,; 將 r1~r7,lr 入棧。滿遞減堆疊。

ldmfd sp!, ;資料出棧,放入 r1~r7,lr 暫存器。滿遞減堆疊。

堆疊是特定順序進行訪問的儲存區,操作順序分為「後進先出」和「先進後出」 ,堆疊定址時隱含的,它使用乙個專門的暫存器(堆疊指標)指向一塊儲存區域(堆疊),指標所指向的儲存單元就是堆疊的棧頂。

儲存器堆疊可分為兩種:

向上生長:向高位址方向生長,稱為遞增堆疊

向下生長:向低位址方向生長,稱為遞減堆疊

堆疊指標指向最後壓入的堆疊的有效資料項,稱為滿堆疊;堆疊指標指向下乙個要放入的空位置, 稱為空堆疊。這樣就有 4 中型別的堆疊表示遞增和遞減的滿堆疊和空堆疊的各種組合。

滿遞增:堆疊通過增大儲存器的位址向上增長,堆疊指標指向內含有效資料項的最高位址。指令如 ldmfa,stmfa 等。

空遞增:堆疊通過增大儲存器的位址向上增長,堆疊指標指向堆疊上的第乙個空位置。指令如 ldmea,stmea 等

滿遞減:堆疊通過減小儲存器的位址向下增長,堆疊指標指向內含有效資料項的最低位址。指令如 ldmfd,stmfd 等。

空遞減:堆疊通過減小儲存器的位址向下增長,堆疊指標指向堆疊下的第乙個空位置。指令如 ldmed,stmed 等。

8、塊拷貝定址

stmia r0!, ;將 r1~r7 的資料儲存到儲存器中,儲存器指標在儲存第一

;個值之後增加,增長方向為向上增長。

stmib r0!, ;將 r1~r7 的資料儲存到儲存器中,儲存器指標在儲存第一

;個值之前增加,增長方向為向上增長。

s***a r0!, ;將 r1~r7 的資料儲存到儲存器中,儲存器指標在儲存第一

;個值之後增加,增長方向為向下增長。

s***b r0!, ;將 r1~r7 的資料儲存到儲存器中,儲存器指標在儲存第一

;個值之前增加,增長方向為向下增長。

多暫存器傳送指令用於一塊資料從儲存器的某一位置拷貝到另一位置。塊拷貝定址指令舉例如下:

9、相對定址

bl   route1    ;呼叫到 route1 子程式

beq loop      ;條件跳轉到 loop 標號處

…loop mov r2,#2

…route1

…相對定址是基址定址的一種變通,由程式計數器 pc 提供基準位址,指令中的位址碼字段作為偏移量,兩者相加後得到的位址即為運算元的有效位址。

ARM處理器定址方式

arm處理器支援九種定址方式,分別是 立即定址 暫存器定址 暫存器間接定址 暫存器移位定址 基址變址定址 多暫存器定址 堆疊定址 塊拷貝定址 相對定址 例如 mov r0,1234作用是將十進位制數1234賦值給r0,執行結果是r0 1234,立即數以 作為字首,十六進製制數以 0x 開頭,如 0x...

ARM處理器 八種定址方式

arm處理器的八種定址方式 前言 1.什麼是定址?資料都存在儲存器中,定址簡單地說就是找到儲存資料或指令的位址。儲存器有很多儲存單元,用於儲存資料。或者說,定址就是讀取資料所在儲存裝置中對應位址編號中儲存的內容。以儲存單位定址分為位,字,節,字,雙字定址。以功能定址分為直接定址,間接定址,暫存器定址...

ARM定址方式

arm定址方式定義 處理器根據指令中給出的資訊來找到所需運算元的方式 立即數定址 運算元本身就在指令中給出,只需要取出指令就得到了運算元的方式。運算元稱為立即數 add r0,r0,0x3f r0 r0 3f 第二個數就是運算元,需要用 來作為字首 暫存器定址 運算元存在暫存器中,利用暫存器中的數值...