ARM彙編指令集1 需要的基礎知識

2021-08-08 23:30:57 字數 2502 閱讀 7168

arm彙編指令集1--需要的基礎知識

---參考朱有鵬arm裸機程式設計

前言:學習的過程,就是乙個先模仿,然後再進行創新的過程。

學習朱老師的課程,真的完全從0開始學習,以前有很多的地方真的並沒有理解,

等全部學習完後再進行一次總結與感謝。

1、指令與偽指令

(1)彙編指令是cpu機器指令的助記符,經過編譯後會得到一串由1010

組成的機器碼,可以由cpu讀取執行,編譯完成之後才開始工作。

(2)彙編偽指令本質上不是指令(只是和指令一起寫在**中),它是編譯器

環境提供的,目的是用來指導編譯過程,經過編譯後偽指令最終不會勝場機器碼

(在編譯過程中起作用)

2、兩種不同風格arm指令:

(1)arm官方的arm彙編風格:指令一般用大寫、window中ide中開發

環境(ads、mdk等)常用,如:ldr r0,[r1]

(2)gnu風格的arm彙編:指令一般用小寫字母,linux中常用,如

ldr   r0 ,[r1]

這些就是用彙編寫的,你看到的東西就分為兩種:一種叫做指令,一種叫做偽指令

3、arm彙編特點1

ldr、str架構

(1)arm採用risc架構,cpu本身不能直接讀取記憶體,而需要先將記憶體中的

內容加載入cpu中通用暫存器才能被cpu處理

(3)str(store register)指令將暫存器內容存入記憶體空間中

(4)ldr、str組合用來實現arm cpu和記憶體資料的交換

這就使得arm訪問記憶體的效率要低一些。

4、arm彙編特點2:8種定址方式:

以前學習stm8的時候,老師,整天跟我們說彙編不要丟掉了

也說了這些定址方式,但是現在對這些定址方式也有了一定的理解。

(1)暫存器定址                 mov  r1,r2

(2)立即定址                     mov  r0,#0xff00

(3)暫存器移位定址          mov  r0,r1,lsl  #3

(4)暫存器間接定址          ldr  r1,[r2]             ;相當於c語言的指標的呼叫,指標的呼叫也是通過這裡來呼叫

(5)基址變址定址             ldr  r1,[r2,#4]        ;現在這個位址是放置在r2加4的記憶體裡面放置的

(6)多暫存器定址             ldmia   r1!,   ;r1相當於c語言的陣列名

(7)堆疊定址                    stmfd   sp!,     ; 陣列名不再是普通的陣列,只能是堆疊的指標

(8)相對定址                    beq      flag

flag:

5、arm彙編特點3:指令字尾

(1)同一指令經常附帶不同的字尾,變成不同的指令,經常使用的字尾有:

(2)b(byte)功能不變,操作長度變為8位

(3)h(half word)功能不變,長度變為16位

(4)s(signed)功能不變,運算元變為有符號

如:ldr    ldrb    ldrh   ldrsb   ldrsh

(5)s(s標誌)功能不變,影響cpsr的標誌位

(6)如mov 和movs(一般是放在傳輸資料的指令,也就是c語言中的賦值的指令)

兩個s代表的意思是不一樣的,我們需要根據上下文的意思來判斷到底是什麼意思

6、arm彙編特點4:條件執行字尾

(1)moveq  r0,r1   //如果eq字尾成立,則直接執行mov r0,r1;

//如果eq不成立則本句**直接作廢,相當於沒有

//相當於c語言中if(eq)

(2)條件字尾執行注意兩點:

1、條件字尾是否成立,不是取決於本句**,而是取決於這句**之前的**執行後的結果。

3、它是不會直接用的,它會直接用條件碼助記符來用。

gt: greater than

7、arm彙編特點5:多級指令流水線

(1)為了增加處理器指令流的速度,arm使用多級流水線,下圖為3級流水線工作原理示意圖(s5pv210使用13級流水線,arm11為8級)

(2)--允許多個操作同時處理,而非順序執行

arm   thumb

pc    pc          取指         從儲存器中讀取指令

pc-4  pc-2        解碼         解碼指令中用到的暫存器

pc-8  pc-4        執行         暫存器讀(從暫存器bank)

移位及alu操作

暫存器寫(到暫存器bank)

(3)pc指向正被取指的指令,而非正在執行的指令。

流水線的級數越多,s5pv210使用13級流水線,arm11為8級

一旦流水線被打斷,要重新裝載就更加的複雜。

arm就採用這種條件執行的過程。arm的指令的執行效率是非常高的。

會影響我們中斷返回加8或者減8的過程。

ARM彙編指令集

arm彙編指令集的介紹,包括指令和偽指令。指令指的是cpu機器指令的助記符,是由cpu的指令集提供的,經過編譯之後,會以二進位制機器碼的形式由cpu讀取執行 偽指令本質上不是指令,和cpu的機器指令沒有任何關係,只是和指令一起寫在 中而已,是由編譯器環境提供的,其目的是用於指導編譯過程,偽指令經過編...

ARM彙編指令集2

常用arm指令1 資料處理指令 資料傳輸指令 mov mov r1,r2 mov r1,0xff01 mvnmvn和mov用法是一樣的,區別是mov是原封不動的傳遞,而mvn是按位取反後傳遞 如r1 0xff,然後mov r0,r1後,r0 0xff,但 mvn r0,r1時,r0 0xffffff...

常用arm彙編指令 RISC指令集

ldr r0,r1 讀記憶體,r0等於r1所指向位址的值,相當於c語言r0 r1 str r0,r1 寫記憶體,把r0的值存放到r1所指向的位址中,相當於c語言 r1 r0 ldr r1,r2,4 基址變址定址,相當於c語言r1 r2 4 ldr r0,0x12345678 偽指令,編譯最終拆分為幾...