ARM指令定址方式

2021-05-24 11:29:42 字數 4398 閱讀 9538

先看一下arm的各種定址方式,然後開始講一下指令的分類和基本的格式,接著看一下指令中必不可少的條件碼,最後看一下各類指令的操作碼!!!

有些arm指令可能記錄的不是很詳細,可以檢視第七次課的培訓文件中的」命令幫助文件」

一.arm定址方式

1         立即定址

立即定址也叫立即數定址,這是一種特殊的定址方式,運算元本身就在指令中給出,只要取出指令也就取到了運算元,這個運算元被稱為立即數,對應的定址方式也就叫做立即定址。例如以下指令:

n    add       r0,r0,#1          /*r0←r0+1*/

n    add       r0,r0,#0x3f         /*r0←r0+0x3f*/

在以上兩條指令中,第二個源運算元即為立即數,要求以「#」為字首,對於以十六進製制表示的立即數,還要求在「#」後加上「0x」

2  暫存器定址

暫存器定址就是利用暫存器中的數值作為運算元,這種定址方式是各類微處理器經常採用的一種方式,也是一種執行效率較高的定址方式。以下指令:

add        r0,r1,r2            /*r0←r1+r2*/

該指令的執行效果是將暫存器r1和r2的內容相加,其結果存放在暫存器r0中。

其中:當第二運算元為暫存器型的移位操作:

在arm指令的資料處理指令中參與操作的第二運算元為暫存器型時,在執行暫存器定址操作時,可以選擇是否對第二運算元進行移位,即rm,{},其中rm稱為第二運算元暫存器,用來指定移位型別(lsl,lsr,asl,asr,ror或rrx)和移位位數。移位位數可以是5位立即數(#<#shift>)或暫存器(rs)。在指令執行時將移位後的內容作為第二運算元參與運算。例如指令:

add    r3,r2,r1,lsr  #2    ;r3<—r2 + r1÷4

1.       關於第二運算元移位方式

lsl:邏輯左移,空出的最低有效位用0填充。

lsr:邏輯右移,空出的最高有效位用0填充。

asl:算術左移,由於左移空出的有效位用0填充,因此   它與lsl同義。

asr:算術右移,物件是帶符號數,移位過程中必須保持運算元的符號不變。如果源運算元是正數,空出的最高有效位用0填充,如果是負數用1填充。

ror:迴圈右移,移出的字的最低有效位依次填入空出的最高有效位。

rrx:帶擴充套件迴圈右移。將暫存器內容迴圈右移1位,空位用原來c標誌位填充。

2.       第二運算元的移位位數

移位位數可以用立即數方式或者暫存器方式給出,如下所示:

add    r3,r2,r1,lsr  #2     ;r3 <—r2 + r1÷22

add    r3,r2,r1,lsr  r4    ;r3 <—r2 + r1÷2r4

暫存器r1的內容分別邏輯右移2位、r4位(亦即r1÷22 r1÷2r4),再與暫存器r2的內容相加,結果放入r3中。 

3  暫存器間接定址

ldr         r0,[r1]                   /*r0←[r1]*/

str         r0,[r1]                   /*[r1]←r0*/

第一條指令將以r1的值為位址的儲存器中的資料傳送到r0中。第二條指令將r0的值傳送到以r1的值為位址的儲存器中。

4  基址加偏址定址

基址變址定址就是將暫存器(該暫存器一般稱作基址暫存器)的內容與指令中給出的位址偏移量相加,從而得到乙個運算元的有效位址。變址定址方式常用於訪問某基位址附近的位址單元。採用變址定址方式的指令又可以分為以下幾種形式:

前變址模式:

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

5  堆疊定址

利用指標訪問儲存器時,儲存器的位址向高位址方向生長,稱為遞增堆疊(ascending stack)。 儲存器的位址向低位址方向生長,稱為遞減堆疊(descending stack)

四種型別的堆疊工作方式 :

6  塊拷貝定址

塊拷貝定址是多暫存器傳送指令ldm/stm的定址方式。ldm/stm指令可以把儲存器中的乙個資料塊載入到多個暫存器中,也可以把多個暫存器中的內容儲存到儲存器中。定址操作中的暫存器可以是r0-r15這16個暫存器的子集或是所有暫存器。

ldm/stm指令依據其字尾名的不同其定址的方式也有很大不同

7  相對定址

與基址變址定址方式相類似,相對定址以程式計數器pc的當前值為基位址,指令中的位址標號作為偏移量,將兩者相加之後得到運算元的有效位址。以下程式段完成子程式的呼叫和返回,跳轉指令bl採用了相對定址方式:

bl     next                           ;跳轉到子程式 next處執行

next

mov         pc,lr              ;從子程式返回

一.指令分類及指令格式

1.       arm指令集可以分為六大類,分別為:

資料處理指令

load/store指令

程式狀態暫存器與通用暫存器之間的傳送指令

跳轉指令

異常產生指令。

協處理器指令

2.       arm指令使用的基本格式如下:

arm指令集是32位的,程式的啟動都是從arm指令集開始。所有的arm指令集都可以是有條件執行的。arm指令集是以32位二進位制編碼的方式給出的,大部分的指令編碼中定義了第一運算元、第二運算元、目的運算元、條件標誌影響位以及每條指令所對應的不同功能實現的二進位制位。每條32位arm指令都具有不同的二進位制編碼方式,和不同的指令功能相對應。

〈opcode〉       〈rd〉,〈rn〉   

其中:opcode    操作碼;指令助記符,如ldr、str等。

cond         可選的條件碼;執行條件,如eq、ne等。

s            可選字尾;若指定「s」,則根據指令執行結果更新cpsr中的條件碼。

rd         目標暫存器。

rn         存放第1運算元的暫存器。

operand2 第2個運算元

二.arm指令根據cpsr中的條件位自動判斷是否執行指令,在條件滿足時,指令執行,       否則指令被忽略。在arm的指令編碼表中,統一占用編碼的最高四位[31:28]來表示「條件碼」(即「cond」)

三.arm指令詳細介紹

1.       資料處理指令

2.       load/store指令

arm的資料訪問指令load/store是唯一用於暫存器和儲存器之間進行資料傳送的指令。arm指令集中有三種基本的資料訪問指令:

單暫存器的訪問指令(ldr,str)

單暫存器訪問指令是arm在暫存器和儲存器間傳送單個位元組和字的最靈活方式。根據傳送資料的型別不同,單個暫存器訪問指令又可以分為以下兩類:

單字和無符號位元組的資料傳送指令

半字和有符號位元組的資料傳送指令

多暫存器訪問指令(ldm,stm)

多暫存器傳送指令可以用一條指令將16個可見暫存器(r0~r15)的任意子集合(或全部)儲存到儲存器或從儲存器中讀取資料到該暫存器集合中。與單暫存器訪問指令相比,多暫存器資料訪問可用的定址模式更加有限。多暫存器訪問指令的彙編格式如下:

ldm/stm{}rn, 

單暫存器交換指令(swp)

3.       arm指令中有兩條指令,用於在狀態暫存器和通用暫存器之間傳送資料。修改狀態暫存器一般是通過「讀取-修改-寫回」三個步驟的操作來實現的。 這兩條指令分別是:

狀態暫存器到通用暫存器的傳送指令(mrs)

mrs{} rd,cpsr|spsr

通用暫存器到狀態暫存器的傳送指令(msr)

msr{} cpsr_f | spsr_f,#<32-bit immediate>

msr{} cpsr_| spsr_,rm

4.       跳轉指令

b  轉移指令                 bl  帶鏈結的轉移指令

轉移指令b在程式中完成簡單的跳轉指令,可以跳轉到指令中指定的目的位址。bl指令完全象轉移指令一樣地執行轉移,同時把轉移後面緊接的一條指令的位址儲存到鏈結暫存器lr(r14)中。彙編格式如下:

b{}     

bx  帶狀態切換的轉移指令    blx  帶鏈結和狀態切換的轉移指令

這些指令用於支援thumb(16位)指令集的arm晶元,程式可以通過這些指令完成處理器從arm狀態到thumb狀態的切換。類似的thumb指令可以使處理器切換回32位arm指令。彙編格式如下:

bx{} rm

blx

5.       異常中斷指令

異常中斷指令可以分為一下兩種:

軟體中斷指令(swi)

ARM指令格式和定址方式

原文 arm指令的編碼格式 實際指令語法格式為 addeqs r0,r1,r2 該指令的編碼格式為 arm指令的助記符 arm指令在匯程式設計序中用助記符表示,一般arm指令的助記符格式為 其中 操作碼,如add表示算術加操作指令 決定指令執行的條件域 決定指令執行是否影響cpsr暫存器的值 目的暫...

ARM指令集之定址方式

arm7 處理器有兩個指令集 32位的 arm指令集,16位的 thumb 指令集。1 arm指令集 效率高,密度高 2 thumb 指令集 具有較高的 密度。注 1.所有的arm 指令集都是有條件執行的,而 thumb 指令集僅有一條指令具備條件執行功能。2.arm程式和 thumb 程式可相互呼...

ARM彙編指令學習之定址方式

arm處理器共有9中定址方式 1.暫存器定址 運算元的值在暫存器中,指令執行時直接取出暫存器的值來操作 mov r1,r2 r2 r1 sub r0,r1,r2 r1 r2 r0 2.立即定址 mov r0,0xff00 0xff00 r0 subs r0,r0,1 r0 1 r0 3.暫存器移位定...