zoukankan      html  css  js  c++  java
  • 嵌入式开发学习(4)<ARM汇编指令集详解>

    数据传送指令:

      MOV 两个寄存器之间传递。例 MOV r1,r0,将寄存器r0中的内容赋值给r1。

      MVN 同MOV用法一样,区别是MOV是原值传递,而MVN是按位取反后传递。

    算数运算指令:

      ADD SUB RSB ADC SBC RSC

    逻辑指令:

      AND ORR EOR BIC

      BIC的用法:BIC r0,r1,#0x1f,将r1中的数的bit0到bit4清零后赋值给r0;为什么是bit0到bit4呢,这个是由#0x1f来决定,#0x1f有五个bit位是1。如写成#0xf,就有四个bit位是0。

    比较指令:

      CMP CMN TST TEQ

    比较指令用来比较两个寄存器中的数。特点:比较指令不用后加S后缀就可以影响CPRS中的标志位。

    乘法指令:

      MVL MLA UMULL UMLAL SMULL SMLAL

    前导零计数指令:CLZ

    操作CPRS指令:

      MRS :读CPRS。

      MSR:写CPRS。

    跳转指令:

      B :直接跳转。(没打算返回)

      BL:跳转前把返回地址放入lr寄存器中,以便返回,以便函数的调用。(将来还要回来的)

      BX:跳转的同时切换到ARM模式。一般用于异常处理的跳转。  

    访问内存指令:

      单字/半字/字节访问(通过增加后缀)LDR:读内存。 STR:写内存。

      多字批量访问 LDM STM

      SWP 例SWP r1,r2,[r0] 将r0寄存器所存地址的值写到r1寄存器中,再将r2寄存器的值协会到r0寄存器所存地址中。SWP r1,r1,[r0],将r1与r0地址的所存的值互换。

    立即数:

      合法立即数 经过任意以为后,非零部分可以用8位来表示的位合法立即数。如0x000000ff,0xff000000,0xf000000f ,0x00000001都为合法立即数。

      非法立即数 0x1f00000f 为非法立即数,经过以为后,得0x000001ff,不能用8位来表示。

    软中断指令:

      SWI (software interrupt)用来实现操作系统中系统调用。

      

  • 相关阅读:
    HDU 跑跑卡丁车
    螺旋模型
    原型模型
    CSS匹配规则参考
    索引调优
    动态加载外部css或js文件
    des算法的C#实现
    @@RowCount和“SET NOCOUNT ON”在触发器中使用的先后顺序引起的问题
    WebService生成XML文档时出错。不应是类型XXXX。使用XmlInclude或SoapInclude属性静态指定非已知的类型。
    Sql获取星期几的方法
  • 原文地址:https://www.cnblogs.com/airduce/p/7499353.html
Copyright © 2011-2022 走看看