Arm匯編常見(jiàn)的寄存器
- 寄存器:r0~r15, sp, lr, sb, sl, fp, ip, pc
- 條件碼:eq, ne, hs, lo, mi, pl, vs, vc, hi, ls, ge, lt, gt, le, al
------------------------------------------ 一、數(shù)據(jù)寄存器 ---------------------------------------------
;CM3 在一定程度上支持 64 位整數(shù)。
;其中 LDRD/STRD 就是為 64 位整數(shù)的數(shù)據(jù)傳送而設(shè)的,語(yǔ)法 格式為:
LDRD.W RL, RH, [Rn, #+/-offset] {!}
STRD.W RL, RH, [Rn, #+/-offset] {!}
LDRD.W RL, RH, [Rn],#+/-offset
STRD.W RL, RH, [Rn],#+/-offset
LDR R2, =0x1000 ;(0x1000)= 0x1234_5678_ABCD_EF00 : 00 EF CD AB 78 56 34 12
LDRD.W R0, R1,[R2] ;R0= 0xABCD_EF00, R1=0x1234_5678
STRD.W R1, R0,[R2] ;(0x1000)=0xABCD_EF00_1234_5678 : 78 56 34 12 00 EF CD AB
------------------------------------------ 二、指針寄存器 ---------------------------------------------
------------------------------------------ 三、段寄存器 -----------------------------------------------
段寄存器是根據(jù)內(nèi)存分段的管理模式而設(shè)置的。內(nèi)存單元的物理地址由段寄存器的值和一個(gè)偏移量組合而成
的,這樣可用兩個(gè)較少位數(shù)的值組合成一個(gè)可訪問(wèn)較大物理空間的內(nèi)存地址。
------------------------------------------ 四、標(biāo)志位 -----------------------------------------------
flag寄存器是按位起作用的,也就是說(shuō),它的每一位都有專門的含義,記錄特定的信息
溢出 | 方向 | 中斷 | 跟蹤 | 符號(hào) | 零 | 輔進(jìn)位 | 奇偶 | 進(jìn)位 | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
OF | DF | IF | TF | SF | ZF | AF | PF | CF |
ARM架構(gòu)與體系
ARM7處理器采用3級(jí)流水線來(lái)增加處理器指令流的速度,能提供0.9MIPS/MHz的指令處理速度。
ARM指令32位、4個(gè)字節(jié)
31~28 | 27~25 | 24~21 | 20 | 19~16 | 15~12 | 11~0
0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 0000
cond | opcode | Rn | Rd | Op2
ARM指令格式一般如下:
{}{s},{,}
格式中< >的內(nèi)容是必不可少的,{ }中的內(nèi)容可忽略
表示操作碼。如ADD表示算術(shù)加法
{} 表示指令執(zhí)行的條件域。如EQ、NE等,缺省為AL。
{S} 決定指令的執(zhí)行結(jié)果是否影響CPSR的值,使用該后綴則指令執(zhí)行結(jié)果影響CPSR的值,否則不影響
表示目的寄存器
表示第一個(gè)操作數(shù),為寄存器
表示第二個(gè)操作數(shù),可以是立即數(shù)。寄存器和寄存器移位操作數(shù)
text:00000F5E BEQ loc_F74
解釋1:
31-28 : cond(條件域) => 0000 #因?yàn)槭荁指令 所以無(wú)條件
27-25 : 101 #因?yàn)?01就是扽與BEQ
24 : 0 #B就是0 BL就是1
23-0 : offset相對(duì)偏移量
offset= (0F74-pc值)/4 #處理器處于ARM狀態(tài)(三級(jí)流水:PC總是指向第3條指令)時(shí),每條指令為4個(gè)字節(jié) ,PC值 = 當(dāng)前程序執(zhí)行位置 + 8字節(jié) ,除4 是代碼對(duì)齊處理
0000 1010 0000 0000 0011-》 A003-》 300A
解釋2:
31-28字段,cond是條件碼,就是表明這條語(yǔ)句里是否有大于、等于、非零等的條件判斷。
27-26位為保留位,恒為00
25位,shifter_operand段存放的是立即數(shù)還是寄存器,若為寄存器則為0,如果是立即數(shù)則為1
24-21 位為opcode
20位:表明指令是否會(huì)影響程序狀態(tài)寄存器,如果是就是1,否則為0。
19-16位,表示第一個(gè)源操作數(shù)寄存器。
11-0 目的寄存器
http://armconverter.com/ 在線轉(zhuǎn)化指令
寄存器交互指令
LDR R1,[R2],把R2指向的位置的數(shù)據(jù)給R1
STR R1,[R2],在R2指向的地址,存儲(chǔ)R1
PUSH:入棧
POP:出棧
數(shù)據(jù)算數(shù)指令
ADD R0, R1, R2 -> R0 = R1 + R2
ADD R0, R1, #256 -> R0 = R1 + 256
ADD R0, R2, R3,LSL#1 -> R0 = R2 + (R3 << 1)
SUB R0, R2, R3,LSL#1 ; R0 = R2 - (R3 << 1)
數(shù)據(jù)邏輯運(yùn)算指令
與:AND
或:ORR
異或:EOR
LSL:邏輯左移
LSR:邏輯右移
比較指令
CMP:比較指令
其他指令
SWT:切換用戶模式
偽指令:DCB
ARM寄存器
R0-R7: 通用寄存器
R8-R10:不常用的通用寄存器
R11:基質(zhì)寄存器(FP)
R12:暫時(shí)寄存器(IP)
R13:堆棧制作(SP)
R14:鏈接寄存器(LR)
CPSR:狀態(tài)寄存器文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-433674.html
ESP:32位寄存器,sp 是16位寄存器,ESP寄存器通常用來(lái)表示棧頂?shù)闹怠?span toymoban-style="hidden">文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-433674.html
到了這里,關(guān)于Arm匯編---寄存器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!