ARM的一些基本功arm彙編 處理器處理能力

2021-10-01 03:45:26 字數 2900 閱讀 6098

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...