ARM體系結構與程式設計 1

2021-06-22 10:33:43 字數 3560 閱讀 5680

arm處理器的7中執行模式:usr、fiq、irq、svc、abt、und、sys。

arm處理器共37個暫存器:31個通用暫存器(未備份暫存器r0-r7,在所有模式下指的都是同乙個物理暫存器;備份暫存器r8-r12,每個暫存器對應兩個不同的物理暫存器。對於r13[sp]和r14[lr]來說,每個暫存器對應6個不同的暫存器;程式計數器r15[pc]),6個狀態暫存器(當前程式狀態暫存器[cpsr];5個備份狀態暫存器[spsr])。

arm體系的異常中斷:復位、未定義指令、軟體中斷、指令預取中止、資料訪問中止、外部中斷請求、快速中斷請求。

arm處理器響應異常中斷的過程:

1.儲存cpsr到將要執行的異常中斷對應的spsr。

2.設定cpsr,使處理器進入相應的模式。

3.將暫存器r14[lr_mode]設定成返回位址

4.將暫存器r15[pc]設定成該異常中斷的中斷向量位址。

從異常中斷處理程式中返回的過程:

1.恢復spsr_mode到cpsr。

2.複製r14[lr_mode]到r15[pc]。

arm體系的儲存系統:單一的平板位址空間,空間大小為2^32個8位,即2^32b,空間位址為0 到 2^32-1。儲存格式分big-endian和little-endian。

arm指令:arm指令字長為固定的32位。一般編碼格式如下:

|cond|001|opcode|s|rn|rd|shifter_operand|

cond:指令執行的條件編碼

opcode:指令操作符的編碼

s:決定指令的操作是否影響cpsr的值

rn:目標暫存器編碼

rd:包含第乙個運算元的暫存器編碼

shifter_operand:第二個運算元的編碼

arm指令的定址方式:資料處理指令的運算元的定址方式、字及無符號位元組的load/store指令的定址方式[load指令從記憶體中讀取資料到暫存器中,store指令將暫存器中的資料儲存到記憶體]、雜類load/store指令的定址方式、批量load/store指令的定址方式[實現在一組暫存器和一塊連續的記憶體單元之間傳輸資料]、協處理器load/store指令的定址方式[實現在arm處理器和協處理器之間傳輸批量資料]。

arm指令集:

1.跳轉指令:b、bl、blx、bx。

<1>.b及bl:用於實現子程式呼叫,可跳轉的位址範圍大致為-32mb 至 32mb。b指令僅跳轉,bl指令同時還將pc暫存器的值儲存到lr暫存器,子程式的返回可以通過將lr暫存器的值複製到pc暫存器中來實現。

<2>.blx:語法1:blx target_address。

操作的偽**:lr = address of the instruction after the blx instruction

t flag = 1 (即表示切換到thumb指令集)

pc = pc + 跳轉位址

語法2:blx{} 。

操作的偽**:if cond  then

lr = address of the instruction after the blx instruction

t flag = rm[0] (是否切換指令集取決於暫存器rm中的目標位址的bit[0])

pc = rm and 0xfffffffe

<3>bx:語法:bx{} 。

操作的偽**:if cond  then

t flag = rm[0] (是否切換指令集取決於暫存器rm中的目標位址的bit[0])

pc = rm and 0xfffffffe

2.資料處理指令:資料傳送mov、比較cmp、位測試tst、相等測試teq、加法add、減法sub、位清除bic、異或eor、或orr等。

3.乘法指令:32位乘法mul等。

4.狀態暫存器訪問指令:通常修改狀態暫存器是通過「讀取-修改-寫回」的操作來實現的。

<1>mrs:狀態暫存器 到 通用暫存器 的傳送指令。語法:mrs{} , cpsr 

<2>msr:通用暫存器 到 狀態暫存器 的傳送指令。語法:msr{} cpsr,或 msr{} cpsr,#立即數

例如將處理器的模式切換到特權模式:

mrs r0, cpsr ;讀取cpsr

bic r0, r0, #0x1f;修改,去除當預處理器模式

orr r0, r0, #0x13;修改,設定特權模式

msr cpsr_c, r0;寫回,僅僅修改cpsr中的控制位域

5.load/store記憶體訪問指令:字資料讀取指令ldr(從記憶體將乙個32位的字讀取到目標暫存器),字資料寫入str(將乙個32位的字寫入到指定的記憶體單元)等。

6.批量load/store記憶體訪問指令:批量記憶體字資料讀取指令ldm,批量記憶體字資料寫入指令stm。

7.訊號量操作指令:訊號量用於程序間的同步和互斥,對訊號量的操作要求是乙個原子操作,不可被打斷。arm提供swp(字交換指令)和swpb(位元組交換指令)來完成訊號量的操作。

語法為:swp{} , , [rn]

功能:將乙個記憶體單元[rn]的內容讀取到乙個暫存器中,同時將另乙個暫存器的內容寫入到該記憶體單元[rn]中。

8.異常中斷產生指令:軟中斷指令swi(arm通過軟中斷實現在使用者模式下對作業系統中特權模式的程式呼叫即系統呼叫)

語法為:swi{}

功能:用於使用者程式呼叫作業系統的系統服務,作業系統在swi的中斷服務程式中提供相關的系統服務,並定義了引數傳遞的方法,通常引數傳遞方法如下兩種<1>指令中的24為立即數用於指定使用者請求的服務型別,引數通過通用暫存器傳遞。<2>指令中的24位立即數被忽略,使用者請求的服務型別由暫存器r0的數值來決定,引數通過其他的通用暫存器來傳遞。

9.arm協處理器指令:arm支援16個協處理器。arm協處理器指令包括以下3類:<1>用於arm處理器初始化arm協處理器的資料處理操作<2>用於arm處理器的暫存器和arm協處理器的暫存器間的資料傳送操作<3>用於在arm協處理器的暫存器和記憶體單元之間傳送資料。一共五條指令如下:

<1>cdp:協處理器資料操作指令

例如:cdp p5, 2, c12, c10, c3, 4;協處理器p5的操作初始化。其中,操作碼1為2,操作碼2為4,目標暫存器為c12,源運算元暫存器為c10和c3。

<2>ldc:協處理器資料讀取指令

例如:ldc p6, cr4, [r2, #4];r2為arm暫存器,指令讀取記憶體單元[r2, #4]的字資料,傳送到協處理器p6的cr4暫存器中。

<3>stc:協處理器資料寫入指令

例如:stc p8, cr8, [r2, #4]!;r2為arm暫存器,指令將協處理器p8的cr8暫存器中的字資料寫入到記憶體單元[r2, #4]中,指令執行後r2=r2+4。

<4>mcr:arm暫存器到arm協處理器的資料傳送指令

例如:mcr p14, 3, r7, c7, c11, 6;指令從arm暫存器中將資料傳送到協處理器p14的暫存器中。其中r7為arm暫存器,存放源運算元;c7和c11為協處理器暫存器,為目標暫存器;操作碼1為3,;操作碼2為6。

<5>mrc:arm協處理器到arm暫存器的資料傳送指令

例如:mrc p15, 2, r5, c0, c2, 4;指令將協處理器p15暫存器中的資料傳送到arm暫存器中。其中r5為arm暫存器,是目標暫存器;c0和c2為協處理器暫存器,存放源運算元;操作碼1為2,操作碼2為4。

ARM體系結構與程式設計

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

ARM體系結構與程式設計 2

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

ARM體系結構與程式設計 3

arm儲存系統 arm中用於儲存管理的系統控制協處理器cp15 包含16個32位暫存器,其編號為0到15。實際上對於某些編號的暫存器可能對應有多個物理暫存器。訪問cp15暫存器的指令 mrc mcr。cp15中的暫存器c0和c1 c0中存放arm相關的一些標示符 c1是乙個控制暫存器,用於禁止 使能...