arm汇编指令

1、  跳转指令(主要是分支指令)

  分支指令有三种:分支指令B;带链接的分支指令BL(影响LR寄存器);带状态切换的分支指令BX(影响CPSR中的ARM状态和Thumb状态切换)

a)         分支指令——B指令,该指令跳转范围限制在当前指令的±32M字节地址内(ARM指令为字对齐,最低2位地址固定为0)。

  例如:B WAITA    ;跳转到WAITA标号处,但没有保存返回地址

b)        带链接的分支指令——BL指令适用于子程序调用,使用该指令后,下一条指令的地址(PC-4)被拷贝到R14(即LR) 连接寄存器中,然后跳转到指定地址运行程序。跳转范围限制在当    前指令的±32M字节地址内。

 

2、  数据处理指令

  数据处理指令大致可分为3类:数据传送指令;算术逻辑运算指令;比较指令。

  数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操作。所有ARM数据处理指令均可选择使用S后缀,以使指令影响状态标志。

a)         数据传送指令:MOV Rd operand2     ;将operand2的值传递给Rd

  当后缀S时,这些指令根据结果更新标志N和Z,在计算Operand2时更新标志C,不影响标志V。

  operand2若是立即数,则要求是#immed_8r

  例:MOV PC LR    ;子程序返回

 

  #immed_8r:立即数寻址方式中,指令中的立即数是由一个8bit的偶数位得到的,每条指令都包含一个8bit的常量X和移位值Y,该立即数=X循环右移(2*Y)。

  例如0xFF,0x104,0xFF0,0xF000000F,而0x101(位数超过8bit),0xF000001F(位数超过8bit),0x102(不是右移偶数位)都是无效的立即数。

  MVN指令,先取反,再传值

b)        算术指令:

arm汇编指令_第1张图片

c)         逻辑运算指令:

arm汇编指令_第2张图片

  AND R0,R0,#0x01  ;将除最低位外的位都置为0

  ORR R0,R0,#0x0F  ;将R0的低4位置1

  EOR R1,R1,#0x0F  ;将R1的低4位取反

  BIC R1,R1,#0x0F   ;将R1的低4位清零,其它位不变

d)        比较指令:

arm汇编指令_第3张图片

   CMP指令将寄存器Rn的值减去operand2的值,根据操作的结果更新CPSR中的相应条件标志位(N/Z/C/V),以便后面的指令根据相应的条件标志来判断是否执行。CMP指令与SUBS指令的区别在于CMP指令不保存运算结果。

3、  乘法指令:

 arm汇编指令_第4张图片

4、  程序状态寄存器访问指令

  在ARM处理器中,只有MRS指令可以对状态寄存器CPSR和SPSR进行读操作。通过读CPSR可以了解当前处理器的工作状态。读SPSR寄存器可以了解到进入异常前的处理器状态。

  MRS Rd,psr    ;将psr状态寄存器的值读到Rd(将S读到R)

  MSR psr_fileds,Rd(或者是#immed_8r)       ;将Rd的值写入状态寄存器(将R写入S)

 arm汇编指令_第5张图片

  psr:CPSR或SPSR

  fileds指定传输的区域,filed可以是以下一种或者多种(字母必须为小写)

         c控制域屏蔽字节(psr[7…0])

         x扩展域屏蔽字节(psr[15…8])

         s状态域屏蔽字节(psr[23…16])

         f标志域屏蔽字节(psr[31…24])

 arm汇编指令_第6张图片

5、  加载和存储指令

  ARM处理器是典型的RISC处理器,对存储器的访问只能使用加载和存储指令实现。ARM9处理器是冯•诺依曼存储结构,RAM存储空间及I/O映射空间统一编址,除对RAM操作以外,对外围IO、程序数据的访问均要通过加载/存储指令进行。

  存储器访问指令分为单寄存器操作指令和多寄存器操作指令。

 arm汇编指令_第7张图片

arm汇编指令_第8张图片

 arm汇编指令_第9张图片

 arm汇编指令_第10张图片

6、  批量数据加载和存储指令

 arm汇编指令_第11张图片

7、  数据交换指令

 arm汇编指令_第12张图片

8、  移位指令

 arm汇编指令_第13张图片

9、  异常产生指令(软件中断指令)

10、               

转载于:https://www.cnblogs.com/suwen/archive/2013/03/09/2951856.html

你可能感兴趣的:(嵌入式)