名字
功能adc
帶進製加法(add with carry)
add加法
and按位與。這裡的按位與和c的」&」功能相同
asr算術右移(arithmetic shift right)
bic按位清零(把乙個數跟另乙個無符號數的反碼按位與)
cmn負向比較(把乙個數跟另乙個資料的二進位制補碼相比較)
cmp比較(compare,比較兩個數並且更新標誌)
cpy把乙個暫存器的值拷貝(copy)到另乙個暫存器中
eor近位異或
lsl邏輯左移(logic shift left)
lsr邏輯右移(logic shift right)
mov暫存器載入資料,既能用於暫存器間的傳輸,也能用於載入立即數
mul乘法(multiplication)
mvn載入乙個數的 not值(取到邏輯反的值)
neg取二進位制補碼
orr按位或
ror迴圈右移
sbc帶借位的減法
sub減法(subtraction)
tst測試(test,執行按位與操作,並且根據結果更新z)
rev在乙個32位暫存器中反轉(reverse)位元組序
revh
把乙個32位暫存器分成兩個(half)16位數,在每個16位數中反轉位元組序
revsh
把乙個32位暫存器的低16位半字進行位元組反轉,然後帶符號擴充套件到32位
sxtb
帶符號(signed)擴充套件乙個位元組(byte)到 32位
sxth
帶符號(signed)擴充套件乙個半字(half)到 32位
uxtb
無符號(unsigned)擴充套件乙個位元組(byte)到 32位
uxth
無符號(unsigned)擴充套件乙個半字(half)到 32位
名字功能
b無條件轉移(branch)
b有條件(condition)轉移
bl轉移並連線(link)。用於呼叫乙個子程式,返回位址被儲存在lr中
cbz比較(compare),如果結果為零(zero)就轉移(只能跳到後面的指令)
cbnz
比較,如果結果非零(non zero)就轉移(只能跳到後面的指令)
itif-then
名字功能
ldr從儲存器中載入(load)字到乙個暫存器(register)中
ldrh
從儲存器中載入半(half)字到乙個暫存器中
ldrb
從儲存器中載入位元組(byte)到乙個暫存器中
ldrsh
從儲存器中載入半字,再經過帶符號擴充套件後儲存乙個暫存器中
ldrsb
從儲存器中載入位元組,再經過帶符號擴充套件後儲存乙個暫存器中
str把乙個暫存器按字儲存(store)到儲存器中
strh
把乙個暫存器存器的低半字儲存到儲存器中
strb
把乙個暫存器的低位元組儲存到儲存器中
ldmia
載入多個字,並且在載入後自增基址暫存器
stmia
儲存多個字,並且在儲存後自增基址暫存器
push
壓入多個暫存器到棧中
pop從棧中彈出多個值到暫存器中
名字功能
svc系統服務呼叫(service call)
bkpt
斷點(break point)指令。如果除錯被使能,則進入除錯狀態(停機)。
nop 無操作(no operation)
cpsie
使能 primask(cpsie i)/faultmask(cpsie f)——清零相應的位
cpsid
除能 primask(cpsid i)/faultmask(cpsid f)——置位相應的位
名字功能
adc帶進製加法
add加法
addw
寬加法(可以加 12 位立即數)
and按位與(原文是邏輯與,有誤——譯註)
asr算術右移
bic位清零(把乙個數按位取反後,與另乙個數邏輯與)
bfc位段清零
bfi位段插入
cmn負向比較(把乙個數和另乙個數的二進位制補碼比較,並更新標誌位)
cmp比較兩個數並更新標誌位
clz計算前導零的數目
eor按位異或
lsl邏輯左移
lsr邏輯右移
mla乘加
mls乘減
movw
把 16 位立即數放到暫存器的底16位,高16位清0
mov載入16位立即數到暫存器(其實彙編器會產生movw——譯註)
movt
把 16 位立即數放到暫存器的高16位,低 16位不影響
mvn移動乙個數的補碼
mul乘法
orr按位或(原文為邏輯或,有誤——譯註)
orn把源運算元按位取反後,再執行按位或(原文為邏輯或,有誤——譯註)
rbit
位反轉(把乙個 32 位整數先用2 進製表達,再旋轉180度——譯註)
rev對乙個32 位整數做按位元組反轉
revh/rev16
對乙個32 位整數的高低半字都執行位元組反轉
revsh
對乙個32 位整數的低半字執行位元組反轉,再帶符號擴充套件成32位數
ror圓圈右移
rrx帶進製的邏輯右移一格(最高位用c 填充,且不影響c的值——譯註)
sfbx
從乙個32 位整數中提取任意的位段,並且帶符號擴充套件成 32 位整數
sdiv
帶符號除法
smlal
帶符號長乘加(兩個帶符號的 32 位整數相乘得到 64 位的帶符號積,再把積加到另乙個帶符號 64位整數中)
smull
帶符號長乘法(兩個帶符號的 32 位整數相乘得到 64位的帶符號積)
ssat
帶符號的飽和運算
sbc帶借位的減法
sub減法
subw
寬減法,可以減 12 位立即數
sxtb
位元組帶符號擴充套件到32位數
teq測試是否相等(對兩個數執行異或,更新標誌但不儲存結果)
tst測試(對兩個數執行按位與,更新z 標誌但不儲存結果)
ubfx
無符號位段提取
udiv
無符號除法
umlal
無符號長乘加(兩個無符號的 32 位整數相乘得到 64 位的無符號積,再把積加到另乙個無符號 64位整數中)
umull
無符號長乘法(兩個無符號的 32 位整數相乘得到 64位的無符號積)
usat
無符號飽和操作(但是源運算元是帶符號的——譯註)
uxtb
位元組被無符號擴充套件到32 位(高24位清0——譯註)
uxth
半字被無符號擴充套件到32 位(高16位清0——譯註)
名字功能
ldr載入字到暫存器
ldrb
載入位元組到暫存器
ldrh
載入半字到暫存器
ldrsh
載入半字到暫存器,再帶符號擴充套件到 32位
ldm從一片連續的位址空間中載入多個字到若干暫存器
ldrd
從連續的位址空間載入雙字(64 位整數)到2 個暫存器
str儲存暫存器中的字
strb
儲存暫存器中的低位元組
strh
儲存暫存器中的低半字
stm儲存若干暫存器中的字到一片連續的位址空間中
strd
儲存2 個暫存器組成的雙字到連續的位址空間中
push
把若干暫存器的值壓入堆疊中
pop從堆疊中彈出若干的暫存器的值
名字功能
b無條件轉移
bl轉移並連線(呼叫子程式)
tbb以位元組為單位的查表轉移。從乙個位元組陣列中選乙個8位前向跳轉位址並轉移
tbh以半字為單位的查表轉移。從乙個半字陣列中選乙個16 位前向跳轉的位址並轉移
名字功能
ldrex
載入字到暫存器,並且在核心中標明一段位址進入了互斥訪問狀態
ldrexh
載入半字到暫存器,並且在核心中標明一段位址進入了互斥訪問狀態
ldrexb
載入位元組到暫存器,並且在核心中標明一段位址進入了互斥訪問狀態
strex
檢查將要寫入的位址是否已進入了互斥訪問狀態,如果是則儲存暫存器的字
strexh
檢查將要寫入的位址是否已進入了互斥訪問狀態,如果是則儲存暫存器的半字
strexb
檢查將要寫入的位址是否已進入了互斥訪問狀態,如果是則儲存暫存器的位元組
clrex
在本地的處理上清除互斥訪問狀態的標記(先前由 ldrex/ldrexh/ldrexb做的標記)
mrs載入特殊功能暫存器的值到通用暫存器
msr儲存通用暫存器的值到特殊功能暫存器
nop無操作
sev傳送事件
wfe休眠並且在發生事件時被喚醒
wfi休眠並且在發生中斷時被喚醒
isb指令同步隔離(與流水線和 mpu等有關——譯註)
dsb資料同步隔離(與流水線、mpu 和cache等有關——譯註)
dmb資料儲存隔離(與流水線、mpu 和cache等有關——譯註)
mo彙編指令 彙編指令大全
一 資料傳輸指令 它們在存貯器和暫存器 暫存器和輸入輸出埠之間傳送資料.1.通用資料傳送指令.mov 傳送字或位元組.movsx 先符號擴充套件,再傳送.movzx 先零擴充套件,再傳送.push 把字壓入堆疊.pop 把字彈出堆疊.pusha 把ax,cx,dx,bx,sp,bp,si,di依次壓...
touch指令解讀
鳥哥在私房菜裡寫到 修改檔案時間戒建置新檔 touch 檔案時間?不就是乙個建立時間嗎?要修改建立時間?非也非也,不要再用windows的思想來學習linux。每個檔案在 linux 底下都會記錄很多時間引數,其實是有三個主要的時間變數,那麼這三個時間變數意義是什麼呢?modification ti...
彙編 彙編指令大全
一 資料傳輸指令 它們在存貯器和暫存器 暫存器和輸入輸出埠之間傳送資料.1.通用資料傳送指令.mov 傳送字或位元組.movsx 先符號擴充套件,再傳送.movzx 先零擴充套件,再傳送.push 把字壓入堆疊.pop 把字彈出堆疊.pusha 把ax,cx,dx,bx,sp,bp,si,di依次壓...