ARM彙編指令特點

2022-09-11 20:15:26 字數 2219 閱讀 9593

(彙編)指令是cpu機器指令的助記符,經過編譯後會得到一串1 0組成的機器碼,由cpu讀取執行。

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

兩種不同風格的arm指令

arm官方的arm彙編風格:指令一般用大寫、windows中ide開發環境(如ads、mdk等)常用。如: ldr r0, [r1]

gnu風格的arm彙編:指令一般用小寫字母、linux中常用。如:ldr r0, [r1]

arm彙編特點1ldr/str架構

arm採用risc架構,cpu本身不能直接讀取記憶體,而需要先將記憶體中內容加載入cpu中通用暫存器中才能被cpu處理。

ldr(load register)指令將記憶體內容加載入通用暫存器。

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

ldr/str組合用來實現 arm cpu和記憶體資料交換。

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

暫存器定址                     mov r1, r2

立即定址                         mov r0, #0xff00

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

暫存器間接定址              ldr r1, [r2]                        

[r2] 這一整體表示乙個記憶體位址   記憶體位址在r2裡面存放       r2相當於乙個指標    指令的意思是把這個記憶體位址裡面的值賦給r1

基址變址定址                 ldr r1, [r2, #4]                   表示在r2裡面位址的基礎上加4依次為位址  並取此位址裡面的值賦給r1

多暫存器定址                 ldmia r1!,       r1裡面的記憶體位址為基位址,從這個位址讀出資料依次放在r2-r7以及r12中

堆疊定址                       stmfd sp!,         從棧位址連續訪問資料放在暫存器中

相對定址                       beq flag

flag:  

arm彙編特點3:指令字尾

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

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

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

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

如 ldr ldrb ldrh ldrsb ldrsh

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

如 mov和movs        movs r0, #0

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

arm彙編語句中.當前語句很多時候要隱含的使用上一句的執行結果.而且上一句的執行結果,是放在cpsr暫存器裡,(比如說進製,為0,為負…)

cmp r0,r1

bne nomatch

比如上一句,bne隱含的使用的上一句cmp執行結果.ne字尾表示使用z標誌位.兩句合起來的意思就是,如果r0,r1的值不相等,就跳轉到nomatch處執行.

注意,pc=r15,cpsr=r16

arm彙編特點

5:多級指令流水線

為增加處理器指令流的速度,arm

使用多級流水線

.,下圖為

3級流水線工作原理示意圖。(

s5pv210

使用13

級流水線,

arm11為8

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

pc指向正被取指的指令,而非正在執行的指令

ARM彙編指令

b或bl指令引起處理器轉移到 子程式名 也就是位址 處開始執行,這兩個指令都是相對跳轉指令。兩者的不同之處在於bl指令在轉移到子程式執行之前,將其下一條指令的位址拷貝到r14 lr,鏈結暫存器 由於bl指令儲存了下條指令的位址,因此使用指令 mov pc lr 即可實現子程式的返回。而b指令則無法實...

arm彙編指令

一般arm官方風格彙編指令為大寫,windows ads mdk 實際運用一般用gnu風格,為小寫,linux 1 arm採用risc架構,cpu本身不能直接讀取內 存,而需要先將記憶體中內容加載入cpu中通用寄 存器中才能被 cpu處理 ldr loadregister 指令 將記憶體內容加載入通...

ARM彙編指令

1.彙編概述 2.指令分類學習 3.偽指令 4.協處理訪問指令 為什麼要學習使用匯程式設計序?bootloader kernel的初始化和需要執行效率極高的程式中 1.arm標準彙編 2.gnu彙編 section.data 初始化的資料 section.bss 未初始化的資料 section.te...