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


1.指令與僞指令的概念:linux

1(彙編)指令是CPU機器指令的助記符,通過編譯後會獲得一串10組成的機器   碼,能夠由CPU讀取執行。架構

 

2(彙編)僞指令本質上不是指令(只是和指令一塊兒寫在代碼中),它是編譯器環 境提供的,目的是用來指導編譯過程,通過編譯後僞指令最終不會生成機器碼。less

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處理。im

(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點:

一、條件後綴是否成立,不是取決於本句代碼,而是取決於這句代碼以前的代碼運行後的結果。

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

2.5:多級指令流水線

 

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

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

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

相關文章
相關標籤/搜索