嵌入式系统(三):ARM 指令汇编(3)

在(2)中基本上把ARM的存储访问指令过了一遍,今天搞搞其他类型的指令。

文章结构

  • (2)数据处理指令
    • ① 数据传送指令-MOV,MVN
    • ② 算术逻辑运算指令;
    • ③ 比较指令-不用加S标志位都会影响标志位,别的都不行
    • ④ 乘法指令
  • (3)ARM分支指令
    • ① 分支指令“B”
    • ② 分支指令“BL”
    • ③ 分支指令“BX”
  • (4)协处理器指令
    • ① CDP——协处理器数据操作指令
    • ② LDC/STC——协处理器数据存/取指令

(2)数据处理指令

数据处理指令大致可分为3类:

数据传送指令;
算术逻辑运算指令;
比较指令。

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

① 数据传送指令-MOV,MVN

MOV指令将8位图立即数或寄存器传送到目标寄存器(Rd),可用于移位运算等操作。
嵌入式系统(三):ARM 指令汇编(3)_第1张图片
同类型的指令还有MVN,它可以实现数据的非传递,即把操作数取反后送至目标寄存器。
嵌入式系统(三):ARM 指令汇编(3)_第2张图片嵌入式系统(三):ARM 指令汇编(3)_第3张图片
.MOV指令与LDR指令都是往目标寄存器中传送数据,但是它们有什么区别吗?

MOV指令用于将数据从一个寄存器传送到另一个寄存器中,或者将一个常数传送到一个寄存器中,但是不能访问内存。LDR指令用于从内存中读取数据放入寄存器中

② 算术逻辑运算指令;

算术逻辑运算指令包括“加/减”以及“与/或/异或”等指令,它们的格式如下:
嵌入式系统(三):ARM 指令汇编(3)_第4张图片
嵌入式系统(三):ARM 指令汇编(3)_第5张图片

③ 比较指令-不用加S标志位都会影响标志位,别的都不行

比较指令将两个数值进行的特定运算,根据运算结果影响CPSR的相关标志位,用于后面程序的条件执行,但是运算结果不予保存。
嵌入式系统(三):ARM 指令汇编(3)_第6张图片
嵌入式系统(三):ARM 指令汇编(3)_第7张图片

④ 乘法指令

嵌入式系统(三):ARM 指令汇编(3)_第8张图片
对64位乘法指令而言,RdLo存储两个操作寄存器运算结果的低32位,RdHo存储高32位。另外,32位乘加指令的加操作数是通过一个寄存器另外给的,而64位乘加指令的加操作数是存储运算结果的两个操作数。

(3)ARM分支指令

在ARM中有两种方式可以实现程序的跳转:

1.直接向PC寄存器赋值实现跳转;
例: MOV PC,R14
2.使用分支指令直接跳转
嵌入式系统(三):ARM 指令汇编(3)_第9张图片

① 分支指令“B”

B:分支指令,跳转目标地址基于PC的偏移量,为24位常数(4G),因为用来表示目标地址的位数有限,B指令无法实现4G范围内的任意跳转。
嵌入式系统(三):ARM 指令汇编(3)_第10张图片

② 分支指令“BL”

带链接的分支指令——BL指令除了具有跳转功能,还能在跳转之前将下一条指令的地址拷贝到R14(即LR) 链接寄存器中,它适用于子程序调用(调用完之后还会返回,返回后可以直接读取跳转前的下一条指令)。跳转范围限制在当前指令的±32M字节地址内。指令格式如下:
嵌入式系统(三):ARM 指令汇编(3)_第11张图片
在Addr1时进行跳转,同时将Addr2存入链接寄存器LR,使用 MOV PC LR,直接将链接寄存器存入PC,起到返回addr2的作用。很方便。

③ 分支指令“BX”

带状态切换的分支指令——BX指令除了具有跳转功能,还能在跳转的同时切换处理器状态。其跳转范围不受限制。指令格式如下:
嵌入式系统(三):ARM 指令汇编(3)_第12张图片

(4)协处理器指令

ARM内核支持协处理器操作,协处理器的控制要通过协处理器命令实现。
嵌入式系统(三):ARM 指令汇编(3)_第13张图片
嵌入式系统(三):ARM 指令汇编(3)_第14张图片

① CDP——协处理器数据操作指令

ARM处理器通过CDP指令通知ARM协处理器执行特定的操作。协处理器数据操作完全是协处理器内部的操作,用于初始化ARM协处理器,完成协处理器寄存器的状态改变。

指令特点:
该操作由协处理器完成,即对命令参数的解释与协处理器有关,指令的使用取决于协处理器。
若协处理器不能成功地执行该操作,将产生未定义指令异常中断。
嵌入式系统(三):ARM 指令汇编(3)_第15张图片

② LDC/STC——协处理器数据存/取指令

协处理器数据存/取指令从存储器读取数据装入协处理器寄存器,或将协处理器寄存器的数据存入存储器。

LDC——协处理器数据读取指令,LDC指令从某一连续的内存单元将数据读取到协处理器的寄存器中。进行协处理器数据的数据传送时,由协处理器来控制传送的字数。若协处理器不能成功地执行该操作,将产生未定义指令异常中断。
嵌入式系统(三):ARM 指令汇编(3)_第16张图片

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