ARM 指令列表

2021-10-01 14:39:41 字數 3059 閱讀 4176

adc

帶進製的32位數加法

add32位數相加

and32位數的邏輯與

b在32m空間內的相對跳轉指令

beq相等則跳轉(branch if equal)

bne不相等則跳轉(branch if not equal)

bge大於或等於跳轉(branch if greater than or equa)

bgt大於跳轉(branch if greater than)

bic32位數的邏輯位清零

bkpt

斷點指令

bl帶鏈結的相對跳轉指令

ble小於或等於跳轉(branch if less than or equal)

bleq

帶鏈結等於跳轉(branch with link if equal)

bllt

帶鏈結小於跳轉(branch with link if less than)

blt小於跳轉(branch if less than)

blx帶鏈結的切換跳轉

bx切換跳轉

cdp cdp2

協處理器資料處理操作

clz零計數

cmn比較兩個數的相反數

c***2位數比較

eor32位邏輯異或

ldc ldc2

從協處理器取乙個或多個32位值

ldm從記憶體送多個32位字到arm暫存器

ldr從虛擬位址取乙個單個的32位值

mcr mcr2 mcrr

從暫存器送資料到協處理器

mla32位乘累加

mov傳送乙個32位數到暫存器

mrc mrc2 mrrc

從協處理器傳送資料到暫存器

mrs把狀態暫存器的值送到通用暫存器

msr把通用暫存器的值傳送到狀態暫存器

mul32位乘

mvn把乙個32位數的邏輯「非」送到暫存器

orr32位邏輯或

pld預裝載提示指令

qadd

有符號32位飽和加

qdadd

有符號雙32位飽和加

qsub

有符號32位飽和減

qdsub

有符號雙32位飽和減

rsb逆向32位減法

rsc帶進製的逆向32法減法

sbc帶進製的32位減法

smlaxy

有符號乘累加(16位*16位)+32位=32位

smlal

64位有符號乘累加((32位*32位)+64位=64位)

smalxy

64位有符號乘累加((32位*32位)+64位=64位)

smlawy

號乘累加((32位*16位)>>16位)+32位=32位

smull

64位有符號乘累加(32位*32位)=64位

smulxy

有符號乘(16位*16位=32位)

smulwy

有符號乘(32位*16位》16位=32位)

stc stc2

從協處理器中把乙個或多個32位值存到記憶體

stm把多個32位的暫存器值存放到記憶體

str把暫存器的值存到乙個記憶體的虛位址內間

sub32位減法

swi軟中斷

swp把乙個字或者乙個位元組和乙個暫存器值交換

teq等值測試

tst位測試

umlal

64位無符號乘累加((32位*32位)+64位=64位)

umull

64位無符號乘累加(32位*32位)=64位

1.跳轉指令

通過直接向pc暫存器中寫入目標位址值可以實現在4gb位址空間中任意跳轉,這種跳轉指令又稱為長跳轉。如果在長跳轉指令之前使用mov lr,pc等指令,則可以儲存將來返回的位址值,這樣就實現了在4gb位址空間中的子程式呼叫。

在arm版本5及以上的體系中,實現了arm指令集和thumb指令集的混合使用。指令使用目標位址值的bit[0]來確定目標程式的型別。bit[0]的值為1時,目標程式為thumb指令;bit[0]值為0時,目標程式為arm指令。

在arm版本5以前的體系中,傳送到pc暫存器中的目標位址值的低兩位bits[1∶0]被忽略,跳轉指令只能在arm指令集中執行,即程式不能從arm狀態切換到thumb狀態。非t系列arm版本5體系不含thumb指令,當程式試圖切換到thumb狀態時,將產生未定義指令異常中斷。

arm跳轉指令可以從當前指令向前或向後的32mb位址空間跳轉。這類跳轉指令有以下4種。

(1)b 跳轉指令

b〔條件) (位址)

b指令屬於arm指令集,是最簡單的分支指令。一旦遇到乙個b指令,arm處理器將立即跳轉到給定的位址,從那裡繼續執行。注意:儲存在分支指令中的實際值是相對當前r15的值的乙個偏移量,而不是乙個絕對位址。它的值由彙編器來計算,是24位有符號數,左移兩位後有符號擴充套件為32位,表示的有效偏移位為26位(+/- 32 mb)。

(2)bl 帶返回的跳轉指令

bi,〔條件) (位址)

bl指令也屬於arm指令集,是另乙個分支指令。就在分支之前,在暫存器r14中裝載上r15的內容,因此可以重新裝載r14到r15中來返回到這個分支之後的那個指令處執行,它是子例程的乙個基本但強力的實現。

(3)blx 帶返回和狀態切換的跳轉指令

blx 《位址》

blx指令有兩種格式,第1種格式的blx指令記作blx(1)。blx(1)從arm指令集跳轉到指令中指定的目標位址,並將程式狀態切換到thumb狀態,該指令同時將pc暫存器的內容複製到lr暫存器中。

blx(1)指令屬於無條件執行的指令。

第2種格式的blx指令記作blx(2)。blx(2)指令從arm指令集跳轉到指令中指定的目標位址,目標位址的指令可以是arm指令,也可以是thumb指令。目標位址放在指令中的暫存器中,該位址的bit[0]值為0,目標位址處的指令型別由cpsr中的t位決定。該指令同時將pc暫存器的內容複製到lr暫存器中。

(4)bx 帶狀態切換的跳轉指令

bx(條件) (dest)

bx指令跳轉到指令中指定的目標位址,目標位址處的指令可以是arm指令,也可以是thumb指令。目標位址值為指令的值和0xfffffffe做「與」操作的結果,目標位址處的指令型別由暫存器決定。

ARM指令列表(部分)

指令 功能adc 進製的32位數加法 add32位數相加 and32位數的邏輯與 b在32m空間內的相對跳轉指令 beq相等則跳轉 branch if equal bne不相等則跳轉 branch if not equal bge大於或等於跳轉 branch if greater than or e...

arm指令 ldr指令

ldr指令ldr作為指令 偽指令在arm彙編中。ldr指令格式 ldr 目的暫存器,儲存器位址 ldr r0,r1 將儲存器位址為r1的字資料讀入暫存器r0。ldr r0,r1,r2 將儲存器位址為r1 r2的字資料讀入暫存器r0。ldr r0,r1,8 將儲存器位址為r1 8的字資料讀入暫存器r0...

ARM彙編指令

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