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 体系结构允许通过增加协处理器来扩展指令集。最常用的协处理器是用于控制片上功能的系统协处理器。例如,控制 Cache 和存储管理单元的 cp15 寄存器。此外,还有用于浮点运算的浮点 ARM 协处理器,各生产商还可以根据需要开发自己的专用协处理器。ARM 协处理器具有自己专用的寄存器组,它们的状态由控制 ARM 状态的指令的镜像指令来控制。程序的控制流指令由 ARM 处理器来处理,所有协处理器指令只能同数据处理和数据传送有关。按照 RISC 的 Load/Store 体系原则,数据的处理和传送指令是被清楚分开的,所以它们有不同的指令格式。ARM 处理器支持 16 个协处理器,在程序执行过程中,每个协处理器忽略 ARM 和其他协处理器指令。当一个协处理器硬件不能执行属于它的协处理器指令时,将产生一个未定义指令异常中断,在该异常中断处理过程中,可以通过软件仿真该硬件操作。如果一个系统中不包含向量浮点运算器,则可以选择浮点运算软件包来支持向量浮点运算。

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。

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

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

2.1 指令编码格式

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

2.2 指令的语法格式

MCR{<cond>} <coproc>,<opcode_1>,<Rd>,<CRn>,<CRm> {<opcode_2>}

① <cond>
为指令编码中的条件域。它指示指令在什么条件下执行。当忽略时,指令为无条件执行(cond=AL(Alway ))。
② <coproc>
指定协处理器的编号,标准的协处理器的名字为 p0、p1、…、p15。

③ <opcode_1>
指定协处理器执行的操作码,确定哪一个协处理器指令将被执行。
④ <Rd>
确定哪一个 ARM 寄存器的数值将被传送。如果程序计数器(PC)的值被传送,指令的执行结果不可预知。
⑤ <CRn>
确定包含第一个操作数的协处理器寄存器。
⑥ <CRm>
确定包含第二个操作数的协处理器寄存器。
⑦ <opcode_2>
指定协处理器执行的操作码,确定哪一个协处理器指令将被执行。通常与<opcode_1>配合使用。

2.3 指令举例

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

MCR p14,1,r7,c7,c12,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 寄存器中。如果没有协处理器执行指定操作,将产生未定义指令异常。指令的编码格式如下图所示。

3.2 指令的语法格式

MRC{<cond>} <coproc>,<opcode_1>,<Rd>,<CRn>,<CRm>{,<opcode_2>}

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

指定协处理器的编号,标准的协处理器的名字为 p0、p1、…、p15。
② <opcode_1>
指定协处理器执行的操作码,确定哪一个协处理器指令将被执行。
③<Rd>
确定哪一个 ARM 寄存器接受协处理器传送的数值。如果程序计数器 PC 被用作目的寄存器,指令的执行结果不可预知。
④ <CRn>
确定包含第一个操作数的协处理器寄存器。
⑤ <CRm>
确定包含第二个操作数的协处理器寄存器。
⑥ <opcode_2>
指定协处理器执行的操作码,确定哪一个协处理器指令将被执行。通常与<opcode_1>配合使用。

3.3 指令举例

协处理器源寄存器为 c0 和 c2,目的寄存器为 ARM 寄存器 r4,第一操作数 opcode_1=5,第二操作数 opcode_2=3。

MRC p15,5,r4,c0,c2,3

3.4 指令的使用

如果目的寄存器为程序计数器 r15,则程序状态字条件标准位根据传送数据的前 4bit确定,后 28bit 被忽略。指令的编码格式中,bits[31:24]、bit[20]、bits[15:8]和 bit[4]为 ARM体系结构定义。其他域由各生产商定义。

硬件协处理器支持与否完全由生产商定义,某款 ARM 芯片中,是否支持协处理器或支持哪个协处理器与 ARM 版本无关。生产商可以选择实现部分协处理器指令或者完全不支持协处理器。

如果协处理器必须完成一些内部工作来准备一个 32 位数据向 ARM 传送(例如,浮点FIX 操作必须将浮点值转换为等效的定点值),那么这些工作必须在协处理器提交传送前进行。因此,在准备数据时经常需要协处理器握手信号处于“忙-等待”状态。ARM 可以在忙-等待时间内产生中断。如果它确实得以中断,那么它将暂停握手以服务中断。当它从中断服务程序返回时,将可能重试协处理器指令,但也可能不重试。例如,中断可能导致任务切换,无论哪种情况,协处理器必须给出一致结果,因此,在握手提交阶段之前的准备工作不允许改变处理器的可见状态。

下图所示列出了 cp15 的各个寄存器的目的。

04. 附录

11.1 ARM Architecture Reference Manual

【ARM】协处理器指令相关推荐

  1. ARM 协处理器指令

    参考链接: ARM指令协处理器处理指令 ARM支持16个协处理器,在程序执行过程中,每个协处理器忽略属于ARM处理器和其他协处理器指令,当一个协处理器硬件不能执行属于她的协处理器指令时,就会产生一个未 ...

  2. ARM协处理器(CP15)指令介绍

    什么是协处理器 协处理器是一种芯片,用于减轻系统微处理器的特定处理任务.例如,数学协处理器可以控制数字处理:图形协处理器可以处理视频绘制.例如,intel pentium微处理器就包括内置的数学协处理 ...

  3. arm 协处理器cp14 cp15

    ARM926EJ-S/ARM920T 协处理器 CP14, CP15详解 ARM 微处理器可支持多达 16 个协处理器,用于各种协处理操作,在程序执行的过程中,每个协处理器只执行针对自身的协处理指令, ...

  4. ARM汇编指令以及伪指令

    文章目录 ARM寄存器 ARM指令的一般编码格式 ARM指令的条件域 ARM寻址方式 数据处理指令的操作数寻址方式 立即数寻址方式 寄存器寻址方式 寄存器移位寻址方式 字或无符号字节的Load/Sto ...

  5. 操作符指令 - ARM汇编指令(二)

    ARM包含6种重要的数据计算处理指令 数据处理指令格式与条件码 条件码 ARM汇编特点3:指令后缀 同一指令经常附带不同后缀,变成不同的指令.经常使用的后缀有: B(byte)功能不变,操作长度变为8 ...

  6. arm协处理器(CDP,LDC,STC,MCR,MRC)

    ARM 微处理器可支持多达 16 个协处理器,用于各种协处理操作,在程序执行的过程中,每个协处理器只执行针对自身的协处理指令,忽略 ARM 处理器和其他协处理器的指令.ARM 的协处理器指令主要用于 ...

  7. ARM体系架构—ARMv7-A指令集:协处理器指令

    ARM体系架构-ARMv7-A指令集 一.ARMv7-A指令集 二.ARMv7-A协处理器 二.ARMv7-A协处理器指令 三.读懂Linux Kernel协处理器指令 一.ARMv7-A指令集 AR ...

  8. 经常使用ARM汇编指令

    一面学习,一面总结,一面记录. 以下是整理在网上找到的一些资料,简单整理记录一下,方便以后查阅. ARM处理器的指令集能够分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.载入/存储指令. ...

  9. 汇编(二)——ARM数据处理指令——算术运算、数据传送

    ARM指令集 数据操作 ARM指令的种类 数据处理指令 程序状态寄存器与通用寄存器之间的传送指令 Load/Store指令 转移指令 异常中断指令 协处理器指令 数据处理指令分为6类 数据传送指令 算 ...

最新文章

  1. Atitit. Attilax企业框架 AEF的发展里程总结
  2. 网页编辑html中怎么写搜索代码,如何在html页面中实现查找功能
  3. 因为名字叫True,她被苹果iCloud服务器拒绝了
  4. php300类库,扩展类库 · PHP300FrameWork · 看云
  5. Pthreads mutex vs Pthreads spinlock
  6. 对联一副,勉励奋斗在网络事业上的兄弟们
  7. shell script 的追踪与 debug
  8. 等待队列设备[置顶] Linux设备驱动,等待队列
  9. XE中rectangle实现渐变
  10. 李宏毅机器学习——无监督学习(五)
  11. RedisRepository封装—Redis发布订阅以及StackExchange.Redis中的使用
  12. 怀念WAP网站和让IE浏览器支持WAP网站
  13. Telink BLE MESH开发|ble mesh开发教程《二》telink_sig_mesh增加调试信息打印
  14. 计算基因组外显子长度
  15. 浅谈如何在优麒麟22.04中使用Eigenstrat和Plink工具生成类23andMe格式原始数据
  16. 利用matlab来计算双曲函数的值,关于MATLAB第2章数值计算与数据分析的介绍
  17. element-plus小demo
  18. 接上个文章(mzsock
  19. oCPC实践录 | 广告冷启动问题的思考与总结
  20. java毕业设计题目

热门文章

  1. C语言程序练习-L1-015 跟奥巴马一起画方块 (15分)
  2. C语言学习之用函数处理,而且用指针类型的数据作函数参数,对输入的两个整数按大小顺序输出
  3. java getstringbounds_java-AttributedString的FontMetrics.getStringBounds给出...
  4. NetworkComms V3 之支持TCP连接和UDP连接
  5. 2018-2019-2 网络对抗技术 20165328 Exp2 后门原理与实践
  6. form表单的一个页面多个上传按钮实例
  7. EF 关系规则(一对一、一对多、多对多...)
  8. Pro Android学习笔记(二九):用户界面和控制(17):include和merge
  9. 对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成。
  10. 牛客网(剑指offer) 第十一题 二进制中1的个数