4.11.3汇编语法
CDP{cond}p#,
{Cond}两个字符的条件码,参考图8:条件代码p#被请求协处理器的惟一标识
cd,cnandcm计算有效的协处理器寄存器序号,分别对应于CRd,CRn,CRm
CDPp1,10,c1,c2,c3;
请求写处理器1执行操作10,操作数为CR2,CR3,并将结果放在CR1
CDPEQp2,5,c1,c2,c3,2;如果Z标志被置位,请求协处理器2执行操作5(类型2),操
作数为CR2和CR3,并将结果放在CR1
56
This file is generated by AlienTools PDF Generator, unregister version
4.12协处理器数据传输(LDC,STC)
????μμóé Foxit Reader ±à?-°?è¨??óD ·-°?2?????1??à1à?£
此指令只有在条件代码位真的时候才执行,不同的条件代码已在本章开始讲过。指令编码在图29显示,图29:协处理器数据传输指令。
这类指令用于直接加载(LDC)或存储(STC)一个协处理器寄存器的子集到MEM。ARM7提供MEM的地址,协处理器提供或者接收数据,并控制传输的字数。31Cond282725242322212019110PUNWL1615Rn1211870CRdCP#偏移量无符号8位立即数偏移量协处理器序号协处理器源或目的寄存器基址寄存器加载/存储位0=存储到MEM1=从MEM中加载回写位0=不回写1=回写基址传输长度上/下位0=下;从基址减去偏移量1=上;基址加上偏移量前/后索引0=后;传输之后加上偏移量1=前;传输之前加上偏移量条件代码区域图29:写处理器数据传输指令4.12.1协处理器域
CP#域用来标识被请求接收或者发送数据的协处理器,只有当一个协处理器的序号与CP#域中的内容相符,协处理器才会执行指令。
CRd域和N包含了协处理器的信息,这些信息被不同的协处理器用不同的方式解释,但是,通常CRd为被传送的寄存器(当多个寄存器被传送时,CRd为第一个寄存器)。N位用于选择两个传输长度之一。例如,N=0选择单寄存器传输,N=1选择内容切换时所有寄存器的传输。.
57
This file is generated by AlienTools PDF Generator, unregister version
4.12.2地址模式
ARM7提供存储器系统传输的地址,用到的寻址模式是用于单次数据传输地址模式的子集。注意,对于协处理器数据传输来讲,8位偏移量指定字偏移,但是对于单次数据传输,立即数偏移量为12位,且指定的是字节偏移。
8位无符号立即数偏移量被左移两位,基址加(U=1)或者减(U=0)偏移量,这个计算可以在基址作为传输地址之前(P=1)或者之后(P=0)进行。改变的基址值可以回写到基址寄存器(W=1),或者老的基址值被保存(W=0)。注意:后向索引地址模式需要清楚地设置W位,不像LDR,STR,当后向索引时总是要回写。
在前向索引指令中被改变的基址寄存器的值,将作为第一个传输字的地址。第二个字(如果多个字传输的话)的地址将是第一个字地址加一个字(四个字节),并且地址将会按此方式依次增加。4.12.3地址对齐
基地址通常情况下应该为字对齐。最低两位地址将为A[1:0],可以由存储器系统解释。4.12.4R15的应用
如果Rn为R15,基址应为指令地址加8个字节,不指定基址回写到R15。4.12.5数据异常
如果地址是合法的,但是存储器管理系统产生一个异常中断,将产生数据陷阱。被改变的基址回写,但是所有其它处理器的状态将保持不变。协处理器要保证在异常处理完之后,数据传输可以重新启动,必须保证当指令重试时,任何一个由它响应的动作都可以重复。4.12.6指令周期
所有的LDC指令将由软件来计算,所花费的周期数将依靠协处理器的支持软件。
协处理器的数据传输指令的执行将花费(n-1)S+2N+bIincrementalcycles,S,N,I在65页5.1部分周期类型说明。n传输字的数量
b协处理器busy-waitloop所花费的周期数
58
This file is generated by AlienTools PDF Generator, unregister version
4.12.7汇编语法
LDC从存储器加载到协处理器STC从协处理器保存到存储器
{L}如果有L则表示一个长传输(N=1),否则,短传输(N=0){Cond}两个字符的条件代码,参考图8:条件代码p#被请求的协处理器唯一的标识
cd是计算协处理器寄存器序号的表达式,此序号被放在CRd区域
(1)可以产生地址的表达式
指定一个前向地址[Rn]零偏移
[Rn,<#expression>]{!}偏移表达式个字节指定一个后向地址
[Rn],<#expression>偏移表达式个字节
(3)
Rn是有效的ARM7寄存器序号的表达式。注意:如果Rn为R15,考虑到ARM7的流水线操作,编译器将从偏移量减去8。
{!}如果存在,(W=1)回写基址。4.12.8举例LDCp1,c2,table
;从地址table中加载协处理器1的操作数c2;用PC相关地址。
STCEQLp2,c3,[R5,#24]!;有条件地存储协处理器2操作数c3到存储器,地址为R5加24
个字节长度的地址,回写此地址到R5,用长传输选项(可能存储多字)。
注意:地址偏移用字节表示,指令偏移区域用字表示,编译器会适当地调节偏移。
59
This file is generated by AlienTools PDF Generator, unregister version
4.13协处理器寄存器传输(MRC,MCR)
????μμóé Foxit Reader ±à?-°?è¨??óD ·-°?2?????1??à1à?£
此指令只有在条件为真时执行,不同的条件在本章开头以定义,指令编码在图30显示。图30:协处理器寄存器传输指令。
此种类型的指令用于直接在ARM7和协处理器之间传输信息。一个协处理器到ARM7寄存器传输指令(MCR)是一个FIX保存在协处理器中的浮点值的过程,在协处理器中浮点数被转换成32位的整数,结果传送到ARM7的寄存器。从ARM7寄存器中32位的(FLOAT)值到协处理器的浮点数(Floating)阐述了ARM7寄存器到协处理器的传输指令(MCR)的应用。
此指令的一个重要应用是直接在协处理器和ARM7CPSR寄存器之间传输控制信息。例如,在协处理器中比较两个浮点数的值,结果可以传输到CPSR,来控制指令流程。3128272423212019Cond1110CPOpcLCRn1615Rd1211CP#87CP5413CRm0协处理器操作寄存器协处理器信息协处理器序号ARM源/目的寄存器处理器源/目的寄存器加载/存储位0=存储到写处理器1=从协处理器加载协处理器操作模式条件代码区图30:协处理器传输指令
4.13.1协处理器区域
像所有的协处理器指令一样,CP#指明了哪一个协处理器被访问。
CPOpc,CRn,CP,CRm只被协处理器用到,这里的解释来自于惯例应用。当协处理器功能与此不一样时,允许其它解释。通常的解释是CPOpc和CP域指定协处理器被要求的操作,CRn是传送信息的源或者目的协处理器寄存器,CRm是第二个协处理器寄存器,根据指定的特殊操作,被用于不同的场合。
60
This file is generated by AlienTools PDF Generator, unregister version