zoukankan      html  css  js  c++  java
  • ARM汇编指令集3

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

        

    •数据传输指令  mov mvn
          mov   r1,  r0        @两个寄存器之间数据传递
          mov       r1,  #0xff   @将立即数赋值给寄存器
    mov 和mvn用法一样,区别是mov是原封不动的传递,而mvn是按位取反后传递
     
    •算术指令  add sub rsb adc sbc rsc 
         and    逻辑与
         orr     逻辑或
         eor     逻辑异或
     
    •逻辑指令  and orr eor bic
        bic     位清零
        bic   r0,r1,#0x1f      @将r1的数的bit0 到bit4清零后赋值给r0
     
    •比较指令  cmp cmn tst teq   (比较指令重在过程不在乎结果
       cmp    r0, r1         @等价于sub   r2, r0,r1  (r2 = r0-r1)
       cmn    r0, r1         @等价于 add r0,r1
       tst      r0,#0x08   @测试bit_3是否为0
       bne    suspendup  @上一条指令指令是否成立 成立就跳转到 标签suspendup
       tst      r0,#0x0f    @测试r0的bit0-bit3是否都为0
     
    •乘法指令  mvl mla umull umlal smull smlal
     
    •前导零计数  clz
    比较指令用来比较2个寄存器中的数
    注意:比较指令不用后加s后缀就可以影响cpsr中的标志位。

    常用ARM指令2:cpsr访问指令 :mrs & msr
    
    

    •mrs用来读psr(包括cpsr、spsr),msr用来写psrpsr(包括cpsr、spsr)
          cpsr和spsr的区别和联系:cpsr程序状态寄存器,整个SOC中只有1个;而spsr有5个,分别在5种异常模式下,作用是当普通模式进入异常模式时,
          用来保存之前普通模式下的cpsr,已在返回普通模式时恢复原来的spsr。
    •CPSR寄存器比较特殊,需要专门的指令访问,这就是mrs和msr。
     
    常用ARM指令3:跳转(分支)指令:b & bl & bx
    •b 直接跳转(就没打开算返回)
    •bl branch and link,跳转前把返回地址放入lr中,以便返回,以便用于函数调用
    •bx跳转同时切换到ARM模式,一般用于异常处理的跳转。
     
    常用ARM指令4:访存指令:ldr/str &  ldm/stm & swp
    •单个字/半字/字节访问 ldr/str
    •多字批量访问  ldm/stm
    •swp r1, r2, [r0]
    •swp r1, r1, [r0](内存和寄存器交换数据)
     
    ARM汇编中的立即数(合法立即数与非法立即数
    •ARM指令都是32位,除了指令标记和操作标记外,本身只能附带很少位数的立即数。因此立即数有合法和非法之分。
    •合法立即数:经过任意位数的移位后非零部分可以用8位表示的即为合法立即数
      如:合法立即数:0x000000ff、0x00ff0000
           非合法立即数:0x000001ff
     
    常用ARM指令5:软中断指令  :swi(software interrupt)
    •软中断指令用来实现操作系统中系统调用
  • 相关阅读:
    5.11号团队冲刺(十)
    5.10号团队冲刺(九)
    python day04
    python day03
    python day02
    python day01
    模板语法标签继承关系
    DNS解析详情
    和域名相关的知识
    Webpack 4.X webpack.config.js 文件配置(一)
  • 原文地址:https://www.cnblogs.com/yygsj/p/5000095.html
Copyright © 2011-2022 走看看