1.跳轉(zhuǎn)指令
B 無條件跳轉(zhuǎn)
BL 帶鏈接的無條件跳轉(zhuǎn)
BX 帶狀態(tài)切換的無條件跳轉(zhuǎn) 根據(jù)目標(biāo)地址最低位切換狀態(tài)(arm/thumb)
BLX 帶鏈接和狀態(tài)切換的無條件跳轉(zhuǎn)
B loc_地址
BEQ,BNE
2.存儲器與寄存器交互數(shù)據(jù)指令 核心
存儲器(主存,內(nèi)存)
寄存器中放的數(shù)據(jù):可以是字符串蠢笋,可以是數(shù),也可以是一個地址,它可以放各種類型的數(shù)據(jù)
存儲地址單元:地址(如0x00004000)與地址中存在的值
LDR:從存儲器中加載數(shù)據(jù)到寄存器 ← Load
LDR R8,[R9,#4] R8為待加載數(shù)據(jù)的寄存器作瞄,加載值為R9+0x4所指向的存儲單元 R8=*(R9+4)
STR:將寄存器的數(shù)據(jù)存儲到存儲器 → Store
STR R8,[R9,#4] 將R8寄存器的數(shù)據(jù)存儲到R9+0x4指向的存儲單元 *(R9+4)=R8
LDM:將存儲器的數(shù)據(jù)加載到一個寄存器列表 →
LDM R0,{R1-R3}將R0指向的存儲單元的數(shù)據(jù)依次加載到R1,R2,R3寄存器
STM:將一個寄存器列表的數(shù)據(jù)存儲到指定的存儲器 ←
PUSH:將寄存器值推入堆棧 壓棧--》
POP:將堆棧值推出到寄存器 出棧 《--
SWP:將寄存器與存儲器之間的數(shù)據(jù)進(jìn)行交換
SWP R1, R1 [R0] 將R1寄存器與R0指向的存儲單元的內(nèi)容進(jìn)行交換
堆城菊,隊列:數(shù)據(jù)結(jié)構(gòu),棧是豎的辅鲸,后進(jìn)先出成箫,且只能從棧頂依次填入數(shù)據(jù)
3.數(shù)據(jù)傳送指令
MOV:將立即數(shù)或寄存器的數(shù)據(jù)傳送到目標(biāo)寄存器 ←
MOV R0, #8 R0=8
4.數(shù)據(jù)算術(shù)運算指令
←
ADD,SUB,MUL,DIV
有符號展箱,無符號運算;帶進(jìn)位運算
5.數(shù)據(jù)邏輯運算指令
與:AND
或:ORR
異或:EOR
移位:實質(zhì)是乘蹬昌,除混驰,類似于小數(shù)點移位,但相反蝇狼。小數(shù)點左移朋蔫,數(shù)變凶菔痢;右移變大婴栽。
但邏輯移位,左移變大辈末,右移變小愚争,且按2的倍數(shù)進(jìn)行,因為是2進(jìn)制挤聘。
LSL:邏輯左移←
LSR:邏輯右移←
LSL R0,R1轰枝,#2 R0=R1*4
LSR R0,R1,#2 R0=R1*2
6.比較指令
CMP:比較
CMP R0 #0 R0寄存器中的值與0比較
標(biāo)志位:如z位组去,這個都可以在動態(tài)調(diào)試時鞍陨,寄存器窗口看到
7.其他指令
協(xié)處理器指令:SWT (切換用戶模式)
偽指令:DCB
8.寄存器尋址方式
立即尋址:MOV R0,#1234 R0=0X1234
寄存器尋址:MOV R0,R1 R0=R1
寄存器移位尋址:MOV R0,R1,LSL #2 R0=R1*4
寄存器間接尋址:LDR R0,[R1] 將R1寄存器中的值作為地址,取出地址中的值賦予R0
寄存器間接基址偏移尋址:LDR R0,[R1从隆,#-4]將R1寄存器的值-0x4的值作為地址湾戳,取出地址中的值給R0
對int a=0;這一句簡單高級語言的匯編理解,首先會開辟一個內(nèi)存存儲單元广料,然后把0x0這個數(shù)放入R0寄存器砾脑,
然后再把R0寄存器的數(shù)據(jù)放入內(nèi)存存儲單元。所以:
MOV R0,#0
STR R0艾杏,[R11,#0x14+var_20]