arm指令的一般編碼格式:
cond: 指令執行的條件編碼
opcode: 指令操作符編碼
s: 決定指令操作是否影響cpsr的值
rd: 目標暫存器編碼
rn: 第乙個運算元的暫存器編碼
shifter_operand: 第二個運算元
一條典型的arm指令語法格式如下:
條件碼如下:
arm指令分六類:跳轉指令、資料處理指令、psr傳送指令、記憶體訪問指令、協處理器指令、異常中斷指令。
跳轉指令:
b: 跳轉指令
bl:帶返回的跳轉指令
blx:帶返回和狀態切換的跳轉指令
bx:帶狀態切換的跳轉指令
資料處理指令:
mov:資料傳送指令
mvn:資料求反傳送指令
add:加法指令
adc:帶位加法指令
sub:減法指令
sbc:帶位減法指令
rsb:逆向減法指令
rsc:帶位逆向減法指令
and:邏輯與操作指令
orr:邏輯或操作指令
eor:邏輯異或操作指令
bic:位清除指令
tst:位測試指令
teq:相等測試指令
cmp:比較指令
cmn:基於相反數的比較指令
乘法指令
mul: 32位乘法指令
mla:32位帶加數的乘法指令
smull:64位有符號乘法指令
smlal:64位帶加數的有符號乘法指令
umull:64位無符號乘法指令
umlal:64位帶加數的無符號乘法指令
雜類的算術指令:
clz: 用於計算運算元最高端0的個數
psr傳送指令:
msr:通用暫存器到psr的傳送指令
mrs:psr到通用暫存器的傳送指令
記憶體訪問指令:
ldr:字資料讀取指令
ldrb: 位元組資料讀取指令
ldrbt:使用者模式的位元組資料讀取指令
ldrh: 半字資料讀取指令
ldrsb: 有符號的位元組資料讀取指令
ldrsh: 有符號的半字資料讀取指令
ldrt: 使用者模式的字資料讀取指令
str:字資料寫入指令
strb: 位元組資料寫入指令
strbt: 使用者模式位元組資料寫入指令
strh: 半字資料寫入指令
strt: 使用者模式字資料寫入指令
批量記憶體訪問指令:
ldm: 將資料從連續的記憶體單元中讀取到指令中指定的暫存器列表中的各暫存器
stm: 將指令中各暫存器中的數值寫入到連續的記憶體單元中
其模式有8種:前四種用於資料塊傳送,後四種用於堆疊操作
ia:每次傳送後位址增加
ib:每次傳送前位址增加
da:每次傳送後位址減少
db:每次傳送前位址增加
fd:滿遞減堆疊
ed:空遞減堆疊
fa:滿遞增堆疊
ea:空遞增堆疊
單資料交換指令:
swp: 字交換
swpb:位元組交換
協處理器指令:
cdp: 協處理器資料操作
ldc: 裝載協處理器暫存器
mcr:從arm暫存器傳資料到協處理器暫存器
mrc:從協處理器暫存器傳資料到arm暫存器
stc: 儲存協處理器暫存器
異常產生指令:
swi: 軟中斷指令 產生軟中斷,處理器進入管理模式
bkpt: 斷點中斷指令 處理器產生軟體斷點
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...