arm指令編碼格式和語法格式及其尋址方式

ARM 267瀏覽


arm指令一般編碼格式和一般語法格式

1、編碼格式:
這里寫圖片描述
2、語法格式:
這里寫圖片描述
3、解釋:
3.1、<>內的項是必須的,{}內的項是可選的
3.2、opcode:指令助記符;cond:執行條件;S:是否影響CPSR寄存器的值;Rd:目標寄存器;Rn:第1個操作數的寄存器;operand2:第2個操作數;
3.3、大多數時候可以根據CPSR的條件標志位覺得是否該執行指令。當條件滿足時才執行,否則不執行。
3.4、arm指令的16個條件碼,如下:
這里寫圖片描述
3.5、示例代碼說明使用條件碼以實現高效的邏輯操作:

C代碼:
if(a> b)
    a++;
else
    b++;
對應的匯編代碼:
CMP R0,R1        ;R0(a)與R1(b)比較
ADDHI R0,R0,#1   ;若R0>R1,則R0=R0+1
ADDLS R1,R1,#1   ;若R0≤1,則R1=R1+1

arm指令尋址方式

1、尋址方式是根據指令中給出的地址碼字段來實現尋找真實操作數地址的方式。
2、數據處理指令的操作數尋址方式歸納如下:
指令格式:
這里寫圖片描述

2.1、立即數方式,必須遵循規則:每一個立即數由一個8位的常數循環右移偶數位得到。公式表達為:立即數 =8位常數循環右移2*4位二進制數 即immediate=const_8 ROR 2*bin_4。
比如,0x104為合法的立即數,而0x101 不是合法的立即數。是不允許在指令中使用的。
2.2、寄存器方式,操作數即為寄存器里的數值
2.3、寄存器移位方式,操作數是寄存器里的數值移位而得到,有如下移位操作:ASR,LSR,LSL,ROR,RRX等。

3、字及無符號字節的load/store指令尋址方式
3.1、load指令從內存讀取數據放入寄存器,store指令用于將寄存器中的數據保存到內存。
3.2、以LDR指令為例說明:
LDR指令的編碼格式如下:
這里寫圖片描述

LDR指令的語法格式如下:
這里寫圖片描述

注釋:cond是指令執行的條件碼,Rd是目的寄存器的編碼,Rn和Address_mode一起構成了第二個操作數的內存地址。

3.3、尋址方式由基址寄存器Rn和地址偏移量address_mode兩部分組成,其中地址偏移量有三種格式:立即數,寄存器,寄存器及一個移位常數。
3.4、尋址方式的地址計算方法有三種:偏移量方法,事先更新方法(即在指令的內存訪問完成后進行基址寄存器內容更新的方式),事后更新方法(在指令的內存訪問完成計算新地址的方式)。
3.5、根據尋址方式的地址計算方法和地址偏移量可知第二個操作數的內存地址共有如下9種格式:
這里寫圖片描述
以第一種格式為例說明第二個操作數的內存地址的計算方法:
[, #+/- ]表示基址寄存器Rn值加或減偏移量,它的指令編碼為:
這里寫圖片描述

使用偏移量方法計算內存地址,它的偽代碼表示為:

if U == 1 then
    address = Rn + offset_12
else /*U = 0*/
    address = Rn - offset_12    

4、雜類Load/Store指令的尋址方式
4.1、指令的語法格式如下:
這里寫圖片描述

4.2、指令中內存單元的尋址方式有以下6種:
這里寫圖片描述

4.2、以第三種尋址方式說明內存地址的計算方法
使用該尋址方式[, #+/-]! 的指令編碼格式如下:
這里寫圖片描述
使用事先更新方法計算內存地址,它的偽代碼如下:

offset_8 = (immedH << 4) OR immedL
if U == 1 then
    address = Rn + offset_8
else /*U = 0*/
    address = Rn - offset_8
if ConditionPassed(cond) then
    Rn = address

5、批量Load/Store指令的尋址方式
5.1、指令功能是實現在一組寄存器和一塊連續的內存單元之間傳輸數據
5.2、它的語法格式和指令編碼格式如下:
這里寫圖片描述
這里寫圖片描述
P位表示基址寄存器Rn所指的內存單元是否包含在指令使用的內存塊中。
U位表示地址變化的方向
W位表示指令執行后,基址寄存器Rn的值是否更新
L位表示操作的類型
5.3、address_mode表示地址變化方式,有四種,如下所示:
這里寫圖片描述

以(DA)事后遞減(U=0)方式 為例說明內存地址的計算方法
DA指令編碼格式如下:
這里寫圖片描述
內存地址的算法,偽代碼表示如下:

start_address = Rn-(Number_Of_Set_Bits_In(register_list)*4)+4
end_address =Rn
if ConditionPassed(cond) and W == 1 then
    Rn = Rn - (Number_Of_Set_Bits_In(register_list) * 4)

6、協處理器Load/Store指令的尋址方式
6.1、指令的功能是在arm處理器和協處理器之間傳輸批量數據
6.2、指令的語法格式和編碼格式如下:
這里寫圖片描述
這里寫圖片描述
對各個標志位含義的解釋:
U位表示基址寄存器Rn的更新方式
N位一般表示傳輸數據的字節大小
W位表示指令執行后,基址寄存器Rn的值是否更新
L位表示操作的類型

七星彩走势图2元网官网