嵌入式开发学习(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)用来实现操作系统中系统调用。

 

 

  

 

posted @ 2017-09-09 21:21  一梦、  阅读(708)  评论(0编辑  收藏  举报