一、寄存器和寻址
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字节数据