2. 資料處理指令
3. 跳轉指令
條件跳轉
msr和mrs
處理器處理能力
定址方式:處理器根據指令中給出的資訊來找到指令所需運算元的方式。
arm暫存器的分類和三種定址方式講的很清楚:
知乎大佬直觀解釋
這篇文章給出列彙編指令的縮寫**,很不錯
ldr(load register)指令 將記憶體內容加載入通用暫存器
str(store register)指令 將暫存器內容存入記憶體中
ldr和str後面可以接一些字尾,比如"b", "h"和"w"分別表示從給定的記憶體位址取1個位元組,2個位元組和4個位元組。
stm和ldm
乙個位元組乙個位元組的傳送那是「螞蟻搬家」,如果要複製大批量的資料,效率實在不高,為此armv7還提供了用於批量傳輸的ldm和stm指令,「m"在這裡代表multiple。stm是把多個暫存器的值傳送到記憶體相鄰的位置,ldm反之。多個暫存器在arm組合語言中用」{}"圈起來,表示待傳送的暫存器列表。
「!」回寫!!!!!
在匯程式設計序中 !的使用,意思是回寫,比如:
ldr r1,
[sp, #s_psr]
ldr lr,
[sp, #s_pc]
!
其中 ! 用來控制基址變址定址的的最終新位址是否進行回寫操作。
此條語句的意思是 執行 ldr 之後 sp 被回寫成 sp+#s_pc 基址變址定址的新位址。i++; i+1;
第乙個i被改變了類似加!,第二個i沒有被改變。
ldp/stp
在armv8中,ldm/stm被新一代的指令ldp(load pair)和stp(store pair)所取代了,
ldm/stm對暫存器列表裡包含的暫存器數量並沒有什麼限制,而ldp/stp要求和記憶體之間傳送資料的暫存器不超過2個。因為"push"和"pop"完全可以用ldm/stm表示,所以他倆也被一併乾掉了。兩代指令的對應關係大概是這樣的:
邏輯移位
將暫存器中存放的內容僅僅視為一串bits
lsl - logical shift left
lsr - logical shift righ
ror(rotate right)
無迴圈左移指令
算術移位
將暫存器中存放的內容視作乙個數值,移位的時候就需要考慮數值的正負問題。
arm中,只有算術右移(asr - arithmetic shift right)指令
每右移一位的結果相當於除以2。
資料序反轉指令
「資料序轉」是指將暫存器中的bits或bytes進行部分交換,交換的形式有很多種,包括反轉所有bits的rbit指令,反轉所有bytes的rev指令,在兩個16位的half word中分別反轉bytes的rev16指令。64位系統中還有rev32。
其中rev指令應該是用的最多的,因為它可以用於網路傳輸中little-endian(le)和big-endian(be)之間的轉換。
bit手術刀
要實現一些更為複雜的位操作,就需要一些更為專業的指令,比如將乙個暫存器的部分bits插入另乙個暫存器的指定部分的bfi(bit field insert)指令,
或者將這些bits直接提取出來的bfx(bit field extract)指令,還有將指定部分的bits清零的bfc(bit field clear)指令。
比如"bfi w0, w1, #9, #6"就是將w1暫存器lsb端的6個bits插入到w0暫存器從bit 9到bit 14的位置。
無條件跳轉
b (branch)跳轉指令 bx
跳轉指令b使程式無條件跳轉到指定的位址執行程式。如果跳轉的目標位址不是由立即數直接給出,而是通過暫存器給出,那就應該使用"bx"。
例:b 0x1234 ;跳轉到絕對位址0x1234處。
bl(branch with link)帶返回的連線跳轉
暗示接下來的跳轉其實是乙個子函式呼叫
bl指令用於實現子程式呼叫。子程式的返回可通過將lr暫存器的值複製到pc暫存器來實現。
例:bl func ;跳轉到子程式func處執行,同時將當前pc值儲存到lr中。
條件跳轉
it(armv7)
armv7專門推出了長的和高階語言的關鍵字很像的"if‐then(it)",這已經不是一條單獨的指令了,而是乙個指令塊(it blocks)。
csel cinc cset(armv8)
armv8
mrs 指令: 對狀態暫存器cpsr和spsr進行讀操作。通過讀cpsr可以獲得當預處理器的工作狀態。讀spsr暫存器可以獲得進入異常前的處理器狀態(因為只有異常模式下有spsr暫存器)。
msr指令: 對狀態暫存器cpsr和spsr進行寫操作。與mrs配合使用,可以實現對cpsr或spsr暫存器的讀-修改-寫操作,可以切換處理器模式、或者允許/禁止irq/fiq中斷等。
一般從彙編指令的角度去看,從兩個方面回答時鐘頻率和處理速度。
arm9處理能力1.1mips/mhz。
在時鐘頻率為1mhz的情況下,一秒鐘處理110萬條指令。(110萬1100000)。
也就是說,時鐘頻率每增加1mhz,1秒鐘就能多處理110萬條指令。
ARM 一些特殊符號
特殊符號對應指令含義 特殊符號 對應指令 含義 dcb 分配一片連續的位元組儲存單元並用指定的資料初始化 dcd 分配一片連續的字儲存單元並用指定的資料初始化 space 分配一片連續的儲存單元 map 定義乙個結構化記憶體表的首位址 filed 定義乙個結構化記憶體表的資料域 equ 為程式中的常...
ARM彙編指令的一些總結 csdeny 百度空間
arm彙編指令的一些總結 arm彙編指令很多,但是真正常用的不是很多,而且需要認真琢磨的又更少了。比較有用的是mov b bl ldr str 還是通過具體彙編 來學習吧。disable watch dog timer mov r1,0x53000000 立即數定址方式 mov r2,0x0 str...
ARM晶元選型的一些建議
目前國內市場常見的arm有nxp philips samsung atmel ti adi等,根據使用者要求及應用領域,可從如下幾個方面選型 1 速度 常規應用 arm7的主時鐘為20 133m,arm9為100 233m,arm10高達700m,如果速度要求更高,還可使用多核arm,如minspe...