常用ARM指令1:数据处理指令
数据传输指令:
mov
mov r1,r2
mov r1,#0xff01
mvn
mvn和mov用法是一样的,区别是mov是原封不动的传递,而mvn是按位取反后传递
如r1=0xff,然后mov r0,r1后,r0=0xff,
但 mvn r0,r1时,r0=0xffffff00.
算术运算指令
略
逻辑指令
and 逻辑与
or 逻辑或
eor 逻辑异或
bic 位清除指令 bic r0,r1,#0x1f将r1中的数的bit0到bit4清零后赋值给r0
比较指令:比较过程中总是会影响CPSR的标志位
cmp cmpr0 r1 等价于sub r2,r0,r1(r2=r0-r1)
cmn cmn r0 r1 等价于add r0,r1
tst tst r0,#0xc 比较bit3,bit2是否全为0。作测试位
teq 测试等价,不相等为1,相等为0
比较指令用来比较2个寄存器中的数 注意:比较指令不用后面加s后缀就可以影响cpsr中的标志位。
常用ARM指令2: cpsr访问指令 mrs & msr
cpsr和spsr的区别和联系:cpsr是程序状态寄存器,整个Soc只有一个;而spsr有5个,分别在5中异常模式下,作用是当从普通模式进入异常模式时,用来保存之前普通模式下的cpsr的,以在返回普通模式时,恢复原来的cpsr。
mrs(mov register,source)用来读psr,msr用来写psr。常用ARM指令3:跳转(分支)指令
b: 直接跳转;(就没打算返回)
bl:branch and link,跳转前把返回地址放入lr中,以便返回,以便于函数调用;(打算返回)
bx:跳转同时切换到ARM模式,一般用于异常处理的跳转。
常用ARM指令4:访存指令
ldr/str & ldm/stm&swp
单个字/半字/字节访问 ldr/str
多字批量访问 ldm/stm
swap r1, r2,[r0] : 把[r0]内存里的内容写到r1,而把r2内容写到[r0]地址中。
swp r1,r1,[r0]:将 [r0]地址的内容 与 r1 寄存器的内容互换。合法立即数: 0x000000ff 0xf000000f
非法立即数: 0x000001ff
软中断指令 swi(software interrupt):软终端指令用来实现操作系统中的系统调用