(彙編)指令是cpu機器指令的助記符,經過編譯後會得到一串1 0組成的機器碼,由cpu讀取執行。
(彙編)偽指令本質上不是指令(只是和指令一起寫在**中),它是編譯器環境提供的,目的是用來指導編譯過程,經過編譯後偽指令最終不會生成機器碼。
兩種不同風格的arm指令
arm官方的arm彙編風格:指令一般用大寫、windows中ide開發環境(如ads、mdk等)常用。如: ldr r0, [r1]
gnu風格的arm彙編:指令一般用小寫字母、linux中常用。如:ldr r0, [r1]
arm彙編特點1:ldr/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...