ARM汇编指令(1)
匯編語(yǔ)言是一種功能很強(qiáng)的程序設(shè)計(jì)語(yǔ)言,也是利用計(jì)算機(jī)所有硬件特性并能直接控制硬件的語(yǔ)言。目前在嵌入式開(kāi)發(fā)、單片機(jī)開(kāi)發(fā)、系統(tǒng)軟件設(shè)計(jì)、某些快速處理、位處理、訪問(wèn)硬件設(shè)備等高效程序的設(shè)計(jì)方面有較多應(yīng)用。
在嵌入式開(kāi)發(fā)中有時(shí)候使用匯編,或者混合編程來(lái)追求高性能。
在安全領(lǐng)域,逆向工程是也需要用到匯編指令對(duì)于底層進(jìn)行分析等操作。
今天要介紹的是ARM指令,平時(shí)做windows逆向用的x86體系的匯編,當(dāng)涉及安卓逆向時(shí)候那么就要用到ARM的匯編了。
先放上ARM指令速查手冊(cè):
鏈接:https://pan.baidu.com/s/1JALdp8YXbESDfkfJjO1QUg?pwd=h7o7
提取碼:h7o7
一、ARM匯編注意事項(xiàng)
1.在ARM匯編中,所有的符號(hào)都必須在一行書(shū)寫,結(jié)尾不用加**’’;"**
2、在ARM匯編程序中,一條ARM指令,偽指令。寄存器名可以全部寫為大寫字母,也可以全部為小寫字母,但是不能大小寫混合編寫使用。
二、數(shù)據(jù)處理指令
1、數(shù)據(jù)傳輸指令
mov 把一個(gè)寄存器的賦給另一個(gè)寄存器,或者將一個(gè)常量賦給寄存器(后邊的量賦給前邊的量)。
2、算術(shù)運(yùn)算指令:ADD、SUB、ADC、RSB、MUL
與X86匯編類似
3、邏輯運(yùn)算指令 AND、ORR、EOR
1、【邏輯與指令】:AND AND R0,R0,#3 ; 保持R0的0、1位,其余位清零。2、【邏輯或指令】:ORR ORR R0,R0,#3 ; 設(shè)置R0的0、1位,其余位保持不變。3、【邏輯異或指令】:EOR EOR R0,R0,#3 ; 反轉(zhuǎn)R0的0、1位,其余位保持不變。4、比較指令:CMP
與x86匯編也類似
5、跳轉(zhuǎn)指令 B(L)
1、【B指令】 B Label ;無(wú)條件跳轉(zhuǎn)到標(biāo)號(hào)Label處執(zhí)行 CMP R1,#0 ;當(dāng)CPSR中的Z條件碼置位時(shí),跳轉(zhuǎn)到標(biāo)號(hào)Label處執(zhí)行 BEQ Label 2、【BL指令】 BL Label ;當(dāng)程序無(wú)條件跳轉(zhuǎn)到標(biāo)號(hào)Label處執(zhí)行時(shí),同時(shí)將當(dāng)前的PC值保存到R14中6 匯編加載 存儲(chǔ)指令: LDR、STR 就是x86的 Load/Store
由存儲(chǔ)器-->寄存器 LDR R0,[R1] ;將存儲(chǔ)器地址為R1的字?jǐn)?shù)據(jù)讀入寄存器R0。 LDR R0,[R1,R2] ;將存儲(chǔ)器地址為R1+R2的字?jǐn)?shù)據(jù)讀入寄存器R0。 LDR R0,[R1,#8] ;將存儲(chǔ)器地址為R1+8的字?jǐn)?shù)據(jù)讀入寄存器R0。 LDR R0,[R1,R2] ! ;將存儲(chǔ)器地址為R1+R2的字?jǐn)?shù)據(jù)讀入寄存器R0,并將新地址R1+R2寫入R1。 LDR R0,[R1,#8] ! ;將存儲(chǔ)器地址為R1+8的字?jǐn)?shù)據(jù)讀入寄存器R0,并將新地址R1+8寫入R1。 LDR R0,[R1],R2 ;將存儲(chǔ)器地址為R1的字?jǐn)?shù)據(jù)讀入寄存器R0,并將新地址R1+R2寫入R1。 LDR R0,[R1,R2,LSL#2]! ;將存儲(chǔ)器地址為R1+R2×4的字?jǐn)?shù)據(jù)讀入寄存器R0,并將新地址R1+R2×4寫入R1。 LDR R0,[R1],R2,LSL#2 ;將存儲(chǔ)器地址為R1的字?jǐn)?shù)據(jù)讀入寄存器R0,并將新地址R1+R2×4寫入R1。由寄存器-->存儲(chǔ)器 STR R0,[R1],#2 ;將R0中的字?jǐn)?shù)據(jù)寫入以R1為地址的存儲(chǔ)器中,并將新地址R1+8寫入R1。 STR R0,[R1,#2] ;將R0中的字?jǐn)?shù)據(jù)寫入以R1+8為地址的存儲(chǔ)器中。條件標(biāo)志(condition flags)
總共有四個(gè)條件標(biāo)志 N, Z, C, V,A32/T32中可存儲(chǔ)更新到APSR寄存器最高的4個(gè)位置。
條件碼(Condition code)
可見(jiàn)arm匯編與X86匯編有許多相似之處,指令方面也有很多一致的,而對(duì)于匯編的學(xué)習(xí)確實(shí)大同小異,關(guān)鍵在于多看官方文檔,以及想要所實(shí)現(xiàn)功能所需的匯編。
總結(jié)
以上是生活随笔為你收集整理的ARM汇编指令(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 方正字体下载2
- 下一篇: 颜色空间/格式转换:HSL-RGB