arm 彙編學習

一、寄存器和尋址
ARM有16個寄存器,R0-R15
PC R15
LR R14
SP R13
IP R12
(Push sp減少,Pop sp增加)
1.尋址方式
從操作地址尋找操作數的方式
2.ARM的尋址方式
a 寄存器尋址, 操作數在寄存器中
b 立即尋址,操作數就在指令中
SUBS R0,R0,#1
;R0-1->R0
MOV R0,#0xff00
c. 寄存器偏移尋址
MOV R0,R2,LSL #3
R2左移三位
d. 寄存器間接尋址
操作數的地址在寄存器中
e. 基址尋址
操作數的地址在寄存器中,不過要加一個偏移量
STR R1,[R2,#-2]
f. 多寄存器尋址
LDMIA l->到別人
STMIA s別人到自己
g. 堆棧尋址
STMID
LDMFD
h. 塊拷貝
STMIA
STMIB
STMDA
STMDB
i. 相對尋址
地址=PC+偏移

二、指令
 指令
1、跳轉指令
B 跳轉指令
BL 帶返回的跳轉指令
BLX 帶返回和狀態切換的跳轉指令
BX 帶狀態切換的跳轉指令
B、BL都可以跳轉到指令的目標地址,B僅僅執行跳轉,BL指令還把PC寄存器的值保存到LR寄存器。
2、數據處理指令
MOV 數據傳送指令
MVN 數據求反傳送指令
CMP 比較指令
CMN 基於相反數的比較指令
TST 位測試指令
TEQ 相等測試指令
ADD 加法
SUB 劍法指令
RSB 逆向減法指令
ADC 帶位加法指令
SBC 帶位減法指令
RSC 帶位逆向減法指令
AND 邏輯與操作
RIC 位清除指令
EOR 邏輯異或操作指令
ORR 邏輯或操作指令



三、狀態寄存器和其他
31  30  29  28  27
N    Z    C    V    Q

R0-R8 無備份、R8-R14有備份
FP(R11)指向當前棧幀的開始,SP(R13)指向當前棧幀的結束
PC(R15)指向當前指令的位置
IP(R12)可以作爲偏移地址,和某些東西一起計算出下一個PC的地址,也可以用來保存臨時變量
LR (R14)返回的地址,返回值在R0
r0 this?

FP棧低 ,最先存儲的位置,高地址  R11
SP棧頂  ,最後存儲的位置,低地址 R13
str 存儲,把寄存器的存儲起來。從彙編來看,從左到右
load 加載,把寄存器的加載起來。從彙編來看,從右到左

objdump -C -d

LDRH 加載無符號半字數據 只加載低2字節數據
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章