【ARM】协处理器指令

00. 目录

文章目录

    • 00. 目录
    • 01. 协处理器指令概述
    • 02. ARM寄存器到协处理器寄存器的数据传送指令MCR
      • 2.1 指令编码格式
      • 2.2 指令的语法格式
      • 2.3 指令举例
      • 2.4 指令的使用
    • 03. 协处理器寄存器到ARM寄存器的数据传送指令MRC
      • 3.1 指令编码格式
      • 3.2 指令的语法格式
      • 3.3 指令举例
      • 3.4 指令的使用
    • 04. 附录

01. 协处理器指令概述

ARM 协处理器可以部分地执行一条指令,然后产生中断。如除法运算除数为 0 和溢出,这样可以更好地处理运行时产生(run-time-generated)的异常。但是,指令的部分执行是由协处理器完成的,此过程对 ARM 来说是透明的。当 ARM 处理器重新获得执行时,它将从产生异常的指令处开始执行。对某一个协处理器来说,并不一定用到协处理器指令中的所有的域。具体协处理器如何定义和操作完全由协处理器的制造商自己决定,因此,ARM协处理器指令中的协处理器寄存器的标识符及操作助记符也有各种不同的实现定义。程序员可以通过宏定义这些指令的语法格式。

ARM 协处理器指令可分为以下 3 类。
(1)协处理器数据操作。协处理器数据操作完全是协处理器内部操作,它完成协处理器寄存器的状态改变。如浮点加运算,在浮点协处理器中两个寄存器相加,结果放在第 3个寄存器中。这类指令包括 CDP 指令。

(2)协处理器数据传送指令。这类指令从寄存器读取数据装入协处理器寄存器,或将协处理器寄存器的数据装入存储器。因为协处理器可以支持自己的数据类型,所以每个寄存器传送的字数与协处理器有关。ARM 处理器产生存储器地址,但传送的字节由协处理器控制。这类指令包括 LDC 指令和 STC 指令。

(3)协处理器寄存器传送指令。在某些情况下,需要 ARM 处理器和协处理器之间传送数据。如一个浮点运算协处理器,FIX 指令从协处理器寄存器取得浮点数据,将它转换为整数,并将整数传送到 ARM 寄存器中。经常需要用浮点比较产生的结果来影响控制流,因此,比较结果必须传送到 ARM 的 CPSR 中。这类协处理器寄存器传送指令包括 MCR 和MRC。

如下表所示列出了所有协处理器处理指令。

2.2 指令的语法格式


为指令编码中的条件域。它指示指令在什么条件下执行。当忽略时,指令为无条件执行(cond=AL(Alway ))。

指定协处理器的编 ,标准的协处理器的名字为 p0、p1、…、p15。


指定协处理器执行的操作码,确定哪一个协处理器指令将被执行。

确定哪一个 ARM 寄存器的数值将被传送。如果程序计数器(PC)的值被传送,指令的执行结果不可预知。

确定包含第一个操作数的协处理器寄存器。

确定包含第二个操作数的协处理器寄存器。

指定协处理器执行的操作码,确定哪一个协处理器指令将被执行。通常与配合使用。

2.3 指令举例

将ARM寄存器r7中的值传送到协处理器p14的寄存器c7中,第一操作数opcode_1=1,第二操作数 opcode_2=6。

2.4 指令的使用

指令的编码格式中,bits[31∶24]、bit[20]、bits[15∶8]和 bit[4]为 ARM 体系结构定义。其他域由各生产商定义。硬件协处理器支持与否完全由生产商定义,某款 ARM 芯片中,是否支持协处理器或支持哪个协处理器与 ARM 版本无关。生产商可以选择实现部分协处理器指令或者完全不支持协处理器。

03. 协处理器寄存器到ARM寄存器的数据传送指令MRC

3.1 指令编码格式

协处理器寄存器到 ARM 寄存器的数据传送指令 MRC(Move to ARM register fromCoprocessor)将协处理器 cp_num 的寄存器的值传送到 ARM 寄存器中。如果没有协处理器执行指定操作,将产生未定义指令异常。指令的编码格式如下图所示。

04. 附录

11.1 ARM Architecture Reference Manual

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年5月15日
下一篇 2020年5月15日

相关推荐