1 常用ARM指令1:数据处理指令
mov(move) mov r1,r0 @两个寄存器之间数据传递 mov r1,#0xff @ 将立即数赋值给寄存器 mvn和mov用法一样,区别是mov是原封不动的传递,而mvn是按位取反后传递 按位取反的含义: 譬如r1 = 0x000000ff,然后mov r0,r1 后,r0 = 0xff。 但是我mvn r0,r1后,r0=0xffffff00。
- 算术指令 add sub rsb adc sbc rsc
- 逻辑指令 and orr eor bic
and 逻辑与 orr 逻辑或 eor 逻辑异或 bic 位清除指令 bic r0,r1,#0x1f @ 将r1中的数的bit0到bit4清零后赋值给r0
比较指令: cmp cmp r0,r1 等价于 sub r2,r0,r1 (r2 = r0 - r1) cmn cmn r0,r1 等价于 add r0,r1 teq 比较指令用来比较2个寄存器中的数 注意:比较指令不用后加s后缀就可以影响cpsr中的标志位。
- 乘法指令 mvl mla umull umlal smull smlal
2 常用ARM指令2:cpsr访问指令
- mrs & msr
- mrs用来读psr,msr用来写psr
- CPSR寄存器比较特殊,需要专门的指令访问,这就是mrs和msr。
cpsr和spsr的区别和联系:cpsr是程序状态寄存器,整个SoC中只有1个;而spsr有5个,分别在5种异常模式下,作用是当从普通模式进入异常模式时,用来保存之前普通模式下的cpsr的,以在返回普通模式时恢复原来的cpsr。
3 常用ARM指令3:跳转(分支)指令
- b & bl & bx
- b 直接跳转(就没打算返回,用于绝对跳转)
- bl branch and link,跳转前把返回地址放入lr中,以便返回,以便用于函数调用
- bx跳转同时切换到ARM模式,一般用于异常处理的跳转。
4 常用ARM指令4:访存指令
- ldr/str & ldm/stm & swp
- 单个字/半字/字节访问 ldr/str
- 多字批量访问 ldm/stm
- swp r1,r2,[r0](将[r0]的内容写到r1,将r2的内容写到r2)
- swp r1,[r0]
ARM汇编中的立即数
- 合法立即数与非法立即数
- ARM指令都是32位,除了指令标记和操作标记外,本身只能附带很少位数的立即数。因此立即数有合法和非法之分。
- 合法立即数:经过任意位数的移位后非零部分可以用8位表示的即为合法立即数
- 合法立即数: 0x000000ff 0x00ff0000 0xf000000f
- 非法立即数: 0x000001ff
5 常用ARM指令5:软中断指令
- swi(software interrupt)
- 软中断指令用来实现操作系统中系统调用
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|