嵌入式開發筆記(五) ARM匯編指令集基礎1 原

ARM 329瀏覽

1.指令與偽指令的概念:

1(匯編)指令是CPU機器指令的助記符,經過編譯后會得到一串10組成的機器   碼,可以由CPU讀取執行。

 

2(匯編)偽指令本質上不是指令(只是和指令一起寫在代碼中),它是編譯器環 境提供的,目的是用來指導編譯過程,經過編譯后偽指令最終不會生成機器碼。

1.1ARM指令的不同風格

兩種不同風格的ARM指令

(1)ARM官方的ARM匯編風格:指令一般用大寫、Windows中IDE開發環境(如 ADS.MDK等)常用。如: LDR R0, [R1]

(2)GNU風格的ARM匯編:指令一般用小寫字母、linux中常用。如:ldr r0, [r1]

2.ARM匯編特點

 2.1:LDR/STR架構

ARM采用RISC架構,CPU本身不能直接讀取內存,而需要先將內存中內容加載入CPU中通用寄存器中才能被CPU處理。

(1)ldr(load register)指令將內存內容加載入通用寄存器。

(2)str(store register)指令將寄存器內容存入內存空間中。

(3)ldr/str組合用來實現 ARM CPU和內存數據交換

2.2:8種尋址方式

-------------------------------------------------------------------------------

(1)寄存器尋址 mov r1, r2

(2)立即尋址 mov r0, #0xFF00

(3)寄存器移位尋址 mov r0, r1, lsl #3(左移)

   ---------------------------------------------------------------------------------

(4)寄存器間接尋址 ldr r1, [r2](r2寄存器存放內存的地址所      對應的值)

(5)基址變址尋址 ldr r1, [r2, #4](r2寄存器存放內存的地 址+4)

 

(6)多寄存器尋址 ldmia r1!, {r2-r7, r12}(r1寄存器存放的          內存地址作為首地 址依次存放到后面 寄存器)

 

(7)堆棧尋址 stmfd sp!, {r2-r7, lr}(sp堆指針連續訪 問放到寄存器)

-----------------------------------------------------------------------

(8)相對尋址      beq flag (思想類似于GOTO)

               flag:(標號)

 

2.3:指令后綴

    同一指令經常附帶不同后綴,變成不同的指令。經常使用的后綴有:

    (1)B(byte)功能不變,操作長度變為8位

    (2)H(half word)功能不變,長度變為16位

    (3)S(signed)功能不變,操作數變為有符號

    如 ldr(加載) ldrb (加載bytel) drh  ldrsb  ldrsh

    (4)S(S標志)功能不變,影響CPSR標志位

    如 mov和movs movs r0, #0

 

 

影響Z。

2.4:條件執行后綴

 

GT greater than

LT less than

例如:

mov r0, r1 @ 相當于C語言中的r0 = r1;

moveq r0, r1     @ 如果eq后綴成立,則直接執行mov r0, r1;如果eq不成立則      本句代碼直接作廢,相當于沒有

@ 類似于C語言中 if (eq){r0 = r1;}

條件后綴執行注意2點:

1、條件后綴是否成立,不是取決于本句代碼,而是取決于這句代碼之前的代碼運行后的結果。

2、條件后綴決定了本句代碼是否被執行,而不會影響上一句和下一句代碼是否被執行。

2.5:多級指令流水線

 

(1)為增加處理器指令流的速度,ARM使用多級流水線.,下圖為3級流水線工作原理示意圖。(S5PV210使用13級流水線,ARM11為8級)

允許多個操作同時處理,而非順序執行。

(2)PC指向正被取指的指令,而非正在執行的指令

 

 

 

 

七星彩走势图2元网官网