ARM體系結構與程式設計學習筆記2

2021-09-01 05:04:15 字數 2673 閱讀 7952

1:arm指令分類

1:arm指令集可以分為跳轉指令,資料處理指令,程式狀態暫存器(psr)傳輸指令,load/store指令,協處理指令和異常中斷產生指令

2:arm指令集字長為固定的32位,一條典型的arm指令編碼格式如下

opcode:指令助記符; 如add表示演算法加操作指令

cond:執行條件;

s:是否影響cpsr暫存器的值;

rd:目標暫存器;

rn:第1個運算元的暫存器;

operand2:第2個運算元;

大多數時候可以根據cpsr的條件標誌位覺得是否該執行指令。當條件滿足時才執行,否則不執行。

條件碼16個,指令的條件碼

2.2.1 資料處理指令的運算元定址方式

asr :算術右移

lsl:邏輯左移

lsr :邏輯右移

ror:迴圈右移

rrx:擴充套件的迴圈右移

mov r0,r1,lsl,#3; r0=r1*(23);

add r0,r1,r1,lsl #3; r0=r1+r1*(23);

sub r0,r1,r2,lsr #4 ;r0=r1-r2/(2**4)

mov r0,r1,ror,r2 ;r0=r1 迴圈右移動r2位。

**2.2.2、立即數方式,**必須遵循規則:每乙個立即數由乙個8位的常數迴圈右移偶數字得到。公式表達為:立即數 =8位常數迴圈右移24位二進位制數 即immediate=const_8 ror 2bin_4。

比如,0x104為合法的立即數,而0x101 不是合法的立即數。是不允許在指令中使用的。

2.2.3、暫存器方式,運算元即為暫存器裡的數值

2.2.4 暫存器移位方式,運算元是暫存器裡的數值移位而得到,有如下移位操作:asr,lsr,lsl,ror,rrx等。

2.2.5、根據定址方式的位址計算方法和位址偏移量可知第二個運算元的記憶體位址共有如下9種格式

以第一種格式為例說明第二個運算元的記憶體位址的計算方法:

[, #+/- ]表示基址暫存器rn值加或減偏移量,它的指令編碼為:

使用偏移量方法計算記憶體位址,它的偽**表示為:

if u == 1 then

address = rn + offset_12

else /*u = 0*/

address = rn - offset_12

4.2、指令中記憶體單元的定址方式有以下6種:

5、批量load/store指令的定址方式

5.1、指令功能是實現在一組暫存器和一塊連續的記憶體單元之間傳輸資料

5.2、它的語法格式和指令編碼格式如下

p位表示基址暫存器rn所指的記憶體單元是否包含在指令使用的記憶體塊中。

u位表示位址變化的方向

w位表示指令執行後,基址暫存器rn的值是否更新

l位表示操作的型別

5.3、address_mode表示位址變化方式,有四種,如下所示:

以(da)事後遞減(u=0)方式 為例說明記憶體位址的計算方法

da指令編碼格式如下: 以(da)事後遞減(u=0)方式 為例說明記憶體位址的計算方法

da指令編碼格式如下:

ARM體系結構與程式設計 2

arm組合語言程式設計 arm組合語言源程式中的語句由指令 偽操作和巨集指令組成。arm指令已經在上一節介紹過了。arm偽操作和巨集指令分類 1 符號定義偽操作 gbla 宣告乙個全域性的算術變數,並將其初始化為0。語法 gbla variable gbll 宣告乙個全域性的邏輯變數,並將其初始化為...

ARM體系結構與程式設計

arm處理器的7中執行模式 usr fiq irq svc abt und sys。arm處理器共37個暫存器 31個通用暫存器 未備份暫存器r0 r7,在全部模式下指的都是同乙個物理暫存器 備份暫存器r8 r12,每乙個暫存器相應兩個不同的物理暫存器。對於r13 sp 和r14 lr 來說,每乙個...

ARM體系結構與程式設計學習(五)

ldr rd,label 示例 字串複製 example 2.7 顯示了用乙個字串覆蓋另乙個字串的 arm 例程。該例程使用ldr偽指令從乙個資料節中載入兩個字串的位址。有以下幾點需要特別注意 dcb dcb指令定義乙個或多個儲存位元組。除了整數值之外,dcb還接受帶引號的字串。字串的每個字元均存放...