|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在ARM和协处理器寄存器之间传送数据有时是有用的。这些协处理器寄存器传送指令使得协处理器中产生的整数能直接传送到ARM寄存器或者影响ARM条件码标志位。典型的使用是:
0 n- h+ _, z; K浮点FIX操作,它把整数返回到ARM的一个寄存器。% A" Q$ r+ R" C3 S
浮点比较,它把比较的结果直接返回到ARM条件码标志位,此标志位将确定控制流。$ Y" |7 K6 G) U. ?8 |; S" `
FLOAT操作,它从ARM寄存器中取得一个整数,并传送给协处理器,在那里整数被转换成浮点表示并装入协处理器寄存器。( H% f* h9 E% x& T6 {; ^5 B
在一些较复杂的ARM CPU中,尝使用系统控制协处理器来控制Cache和存储器管理功能。这类协处理器一般使用这些指令来访问和修改片上的控制寄存器。1 F! k% n: K: }
二进制编码5 R1 ^, ]; o [" d/ A
协处理器寄存器传输指令的二进制编码* L. z6 p9 c8 d/ w' ?3 D# L
说明8 P( m# Q$ A& N. i' s: h
本指令可用于任何可能存在的协处理器。通常,具有协处理器编号CP#的协处理器将接受这条指令。如果没有一个协处理器接受这条指令,则ARM将产生未定义指令陷阱。
* V1 h8 I* o# O4 x/ Z: V5 q) n如果协处理器接受了从协处理器中读取数据的指令,一般它将执行由Cop1和Cop2定义的对于源操作数CRn和CRm的操作,并将32位整数结果返回到ARM,ARM再把它装入Rd。5 C! A$ x8 ~2 z4 Z, f; j
如果在从协处理器读取数据的指令中将PC定义为目的寄存器Rd,则由协处理器产生32位整数的最高4位将被放在CPSR中的N、Z、C和V标志位。+ ^* L( `" X* i! z$ ~" k. G
汇编格式
" S5 \$ H: [# ? X% i/ \- ?从协处理器传送到ARM寄存器:
, ?) p8 h% f; ~2 |! t5 b, L; C$ IMRC{<cond>}<CP#>,<Cop1>,Rd,CRn,CRm{,<Cop2>}. L% [' W9 _0 `7 `
从ARM寄存器传送到协处理器:- H5 o1 {# j( V' n! e' {. U$ y& [% O; S
MRC{<cond>}<CP#>,<Cop1>,Rd,CRn,CRm{,<Cop2>}
' x4 H* @ W/ k4 z" e) y0 Y举例
" J4 ?1 J* S) bMCR p14,3,R0,C1,C20 L9 t7 T) u! a1 Z: _2 q
MRCCS p2,4,R3,C3,C4,6$ D: x- P7 y+ r+ ~# I
注意事项
" ]% z6 [5 j9 tCop1、CRn、Cop2和CRm域由协处理器解释,推荐使用以上解释,以最大限度地域ARM开发工具兼容。0 O/ q! l! Z% Q- P% v
若协处理器必须完成一些内容工作来准备一个32位的数据向ARM传送,则这些工作必须在协处理器提交传送前进行。因此在准备数据时,经常需要协处理器握手信号处于“忙—等待”状态。ARM可在“忙—等待”时间内产生中断,如果它确实得以中断,则它将暂停握手开始中断服务。当它从中断服务程序返回时,将可能重试协处理指令,但也可能不重试,例如阶段中断使服务切换。在任一情况下,协处理器必须给出一致的结果,因此在握手提交阶段之前,进行的准备工作不许改变处理器的可见状态。. U9 `- X/ V5 f' l
从ARM到协处理器的传送一般比较简单,因为任何数据转换工作都可在传送完成后再协处理器进行。 |
|