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