一、ARM指令集,六类指令
1、跳转指令:
B 跳转
BL 带返回的跳转,将下一条指令的地址保存到R14(LR)中
BLX 带返回且切换状态的跳转
BX 不带反回,但是有状态切换的跳转
条件:
EQ Z置位 相等
NE Z清零 不相等
CS C置位 无符号数大于或等于
CC C清零 无符号数小于
MI N置位 负数
PL N清零 正数或零
VS V置位 溢出
VC V 清零 未溢出
HI C置位Z清零 无符号数大于
LS C清零Z置位 无符号数小于或等于
GE N等于V 带符号数大于或等于
LT N不等于v 带符号数小于
GT Z清零且N等于V 带符号数大于
LE Z置位或N不等于V 带符号数小于或等于
AL 忽略 无条件执行
2、数据处理指令
a、数据传送
MOV Rd ,#1
MVN Rd ,#1
MUL Rd,Rm,Rs
b、逻辑运算
ANDS
ANDEQ
ORR
EOR
BIC R0,R0,#%1011 位清除:取反,相与
c、比较指令
CMP
CMPGT(条件)
d、移位指令
LSL 逻辑左
LSR 逻辑右
ASR 算数左
ROR 算数右
RRX 扩展循环左 加入cpsr中的C位
3、状态寄存器指令
MRS R1,CPSR 读取
MSR SPSR R1 存储
4、存储器访问
LDR 加载(条件)
STR 存储(条件)
5、交换指令
SWP R0,R0,[R1] R0与[R1]内容交换
6、软终端指令
SWI 隐式显示
伪指令:
GBLA,GBLL,GBLS:声明全局变量。
LCLA,LCLL,LCLS:声明局部变量。
SETA,SETL,SETS:给变量赋值。
RLIST:为通用寄存器列表定义名称
LDR 区别于 指令LDR 加=为伪指令,加#为指令
ADR 转化为ADD 或者SUB
ADRL 转化为俩次ADD或者SUB
NOP 延时,CPU执行MOV R0,R0