协处理器指令的作用

来源:本站
导读:目前正在解读《协处理器指令的作用》的相关信息,《协处理器指令的作用》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《协处理器指令的作用》的详细说明。
简介: 本文章是关于协处理器指令的作用。

ARM支持的16个协处理器,用于各种协处理器操作,最常使用的协处理器是用于控制片上功能的系统协处理器,例如控制ARM720上的高速缓存存储器管理单元等,也开发了浮点ARM协处理器,还可以开发专用的协处理器。在程序执行过程中,每个协处理器忽略属于ARM处理器核其他协处理器的指令。当一个协处理器硬件不能执行属于它的协处理器指令时,将产生未定义指令异常中断。在该异常中断处理程序时,可通过软件模拟该硬件操作。例如,如果系统中不包含向量浮点运算器,则可选择浮点运算软件模拟包来支持向量浮点运算。

如,如果系统不包含向量浮点运算器,则可选择浮点运算软件模拟包来支持向量浮点运算。

ARM协处理器指令根据其用途主要分为以下3类:

用于ARM处理器初始化ARM协处理器的数据操作指令;

用于ARM处理器的寄存器和ARM协处理器间的数据传送指令;

用于ARM协处理器的寄存器和内存单元之间的传送数据。

1. 协处理器的数据操作

协处理器数据操作完全是协处理器内部的操作,它完成协处理器寄存器的状态改变。一个例子是浮点加法,在浮点协处理器中2个寄存器相加,结果放在第3个寄存器。这些指令用于控制数据在协处理器寄存器内部的操作。标准格式遵循ARM整数数据处理指令的3地址形式,但是所有协处理器域可能会有其他解释。

二进制编码

协处理器数据处理指令的二进制编码如图:

<ignore_js_op>协处理器指令的作用

说明

ARM对可能存在的任何协处理器提供这条指令。如果它被一个协处理器接受,则ARM继续执行下一条;如果它没有被接受,则ARM将产生未定义中止的陷阱(可用来实现“协处理器丢失”的软件仿真)。

通称,与协处理器编号CP#一致的协处理器将接受指令,执行由Cop1和Cop2域定义的操作,使用CRn和CRm作为源操作数,并将结果放到CRd。其中,Cop1和Cop2为协处理器操作码,CRn、CRm和CRd均为协处理器的寄存器,指令中不涉及ARM处理器的寄存器和存储器。

汇编格式

CDP{<cond>}<CP#>,<Cop1>,CRd,CRn,CRm{,<Cop2>}

举例

CDP P5,2,C12,C10,C3,4 ;协处理器p5的操作初始化。其中,

;操作码1为2,操作码2为4,目标寄存器

;为C12,源操作寄存器为C10和C3

注意事项

对于Cop1、CRn、CRd、Cop2和CRm域的解释与协处理器有关。以上解释是推荐的用法,它最大程度地与ARM开发工具兼容。

2. 协处理器的数据存取

协处理器数据传送指令从存储器读取数据装入协处理器寄存器,或将协处理器寄存器的数据存入存储器。因为协处理器可以支持它自己的数据类型,所以每个寄存器传送的字数与协处理器有关。ARM产生存储器地址,但协处理器控制传送的字数。协处理器可能执行一些类型转换作为传送的一部分(例如,浮点协处理器将读取的值转换成它的80位内部表示形式)。

协处理器数据存取指令类似前面介绍的字和无符号字节数据存取指令的立即数偏移格式,但偏移量限于8位而不是12位。

可使用自动变址以及前变址和后变址寻址。

二进制编码

协处理器数据存取指令的二进制编码见图

<ignore_js_op>协处理器指令的作用

说明

本指令可用于任何可能存在的协处理器。如果没有一个协处理器接受它,则ARM将产生未定义指令陷阱,可使用软件仿真协处理器。一般情况下,具有协处理器编号CP#的协处理器将接受这条指令。

地址计算将在ARM内进行,使用ARM基址寄存器和8位立即数偏移量进行计算,8位立即数偏移应左移2位产生字偏移。寻址模式和自动变址模式则以ARM字和无符号字节存取指令相同的方式啦控制。这样定义了第一个存取地址,随后 字则存储到递增的字地址或从递增的字地址读取。

数据由协处理器寄存器提供或由协处理器寄存器接受,由协处理器来控制存取的字数,N位从2种可能的长度中选择一种。

汇编格式

前变址的格式为:

LDC|STC{<cond>}{L}<CP#>,,CRd,[Rn,<offset>]{!}

后变址的格式为:

LDC|STC{<cond>}{L}<CP#>,,CRd,[Rn],<offset>

在这2种情况下,LDC选择选择从存储器中读取数据装入协处理器寄存器,STC选择将协处理器寄存器的数据存到存储器。如果L标志存在,则选择长数据类型(N=1)。<offset>是#

±<8位立即数>。

举例

LDC p6,C0,[R1]

STCEQLp5,C1,[R0],#4

注意事项

N和CRd域的解释与协处理器有关,以上用法是推荐的用法,且最大限度地与ARM开发工具兼容。

如果地址不是字对齐的吗,则最低2位有效将被忽略,但一些ARM系统可能产生异常。

字的存取数目由协处理器控制。ARM将连续产生后续地址,直到协处理器指示存取应该结束。在数据存取的过程中ARM将不影响中断请求,所以协处理器设计者应注意。因为存取非常长的数据将会影响系统中断响应时间。将最大存取长度限制到16个字将确保协处理器数据存取的时间不会长于存取多寄存器指令的最坏状况。

3.协处理器的存储器传送

在ARM和协处理器寄存器之间传送数据有时是有用的。这些协处理器寄存器传送指令使得协处理器中产生的整数能直接传送到ARM寄存器或者影响ARM条件码标志位。典型的使用是:

浮点FIX操作,它把整数返回到ARM的一个寄存器。

浮点比较,它把比较的结果直接返回到ARM条件码标志位,此标志位将确定控制流。

FLOAT操作,它从ARM寄存器中取得一个整数,并传送给协处理器,在那里整数被转换成浮点表示并装入协处理器寄存器。

在一些较复杂的ARM CPU中,尝使用系统控制协处理器来控制Cache和存储器管理功能。这类协处理器一般使用这些指令来访问和修改片上的控制寄存器。

二进制编码

协处理器寄存器传输指令的二进制编码如图

<ignore_js_op>协处理器指令的作用

说明

本指令可用于任何可能存在的协处理器。通常,具有协处理器编号CP#的协处理器将接受这条指令。如果没有一个协处理器接受这条指令,则ARM将产生未定义指令陷阱。

如果协处理器接受了从协处理器中读取数据的指令,一般它将执行由Cop1和Cop2定义的对于源操作数CRn和CRm的操作,并将32位整数结果返回到ARM,ARM再把它装入Rd。

如果在从协处理器读取数据的指令中将PC定义为目的寄存器Rd,则由协处理器产生32位整数的最高4位将被放在CPSR中的N、Z、C和V标志位。

汇编格式

从协处理器传送到ARM寄存器:

MRC{<cond>}<CP#>,<Cop1>,Rd,CRn,CRm{,<Cop2>}

从ARM寄存器传送到协处理器:

MRC{<cond>}<CP#>,<Cop1>,Rd,CRn,CRm{,<Cop2>}

举例

MCR p14,3,R0,C1,C2

MRCCS p2,4,R3,C3,C4,6

注意事项

Cop1、CRn、Cop2和CRm域由协处理器解释,推荐使用以上解释,以最大限度地域ARM开发工具兼容。

若协处理器必须完成一些内容工作来准备一个32位的数据向ARM传送,则这些工作必须在协处理器提交传送前进行。因此在准备数据时,经常需要协处理器握手信号处于“忙—等待”状态。ARM可在“忙—等待”时间内产生中断,如果它确实得以中断,则它将暂停握手开始中断服务。当它从中断服务程序返回时,将可能重试协处理指令,但也可能不重试,例如阶段中断使服务切换。在任一情况下,协处理器必须给出一致的结果,因此在握手提交阶段之前,进行的准备工作不许改变处理器的可见状态。

处理器

提醒:《协处理器指令的作用》最后刷新时间 2024-03-14 00:57:37,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《协处理器指令的作用》该内容的真实性请自行鉴别。