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指向正被取指的指令,而非正在執行的指令