加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

常用ARM指令(数据处理、跳转等指令)

发布时间:2020-12-14 04:59:19 所属栏目:大数据 来源:网络整理
导读:1 常用ARM指令1:数据处理指令 数据传输指令 mov mvn mov(move) mov r1,r0 @两个寄存器之间数据传递 mov r1,#0xff @ 将立即数赋值给寄存器 mvn和mov用法一样,区别是mov是原封不动的传递,而mvn是按位取反后传递 按位取反的含义: 譬如r1 = 0x000000ff,然后

1 常用ARM指令1:数据处理指令

  • 数据传输指令 mov mvn

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 cmn tst teq

比较指令: 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)
  • 软中断指令用来实现操作系统中系统调用

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读