一、汇编指令
1、搬移指令
mov r0 ,#3
mov r1,r0
msr cpsr,r0
mrs r0,cpsr
2、条件执行及标志位
cmp
moveq
movgt
3、机器码
1)、立即数合法性
2)、立即数不合法
ldr r0,=0x12345678 伪指令解决不合法的问题
前4位表示16个数,一个数移动2次。
后8位表示数据位,存储数据位。
4、逻辑指令
AND (&)
orr
bic
tst
5、算数指令
add
sub -
mul *
6、跳转指令
b
bl
.text
main:
mov r1,#0
mov r0,#2@第一个参数用r0来进行描述
bl func1
main_end:
b main_end
func1:
mov r6,lr
cmp r0,#2
bleq fun2
blne fun3
func1_end:
mov pc,r6
fun2:
add r0,r0,#3
mov pc,lr
fun3:
sub r0,r0,#1
mov pc,lr
.end
7、load/store指令
load/store架构 存储器之间不能直接进行数据拷贝,必须借助cpu的寄存器做中转。存储器到寄存器:load,寄存器到存储器store。
ldr/str指令
等价于以下
1、Rd=*Rn
2、Rd=*(Rn+offset)
3、Rd= *(Rn+offset), Rd=Rn+offset;
4、加载位于标签localdata处的单词;
5、Rd=*Rn ,Rn=Rn+offset;
store与load相反 如第一个就是*Rn=Rd
ldmia/stmia批量操作指令
ia后置++,ib:前置++,da后减--,db前减--
stmfd/ldmfd堆栈指令
stmfd sp!,{r0-r12,lr} @入栈
ldmfd sp!,{r0-r12,pc}^ @出栈 ^:cpsr=spsr 恢复工作模式
8、swi指令
软中断指令
swi 0x02 会产生软中断 软中断号为2