|
协处理器数据传送指令从存储器读取数据装入协处理器寄存器,或将协处理器寄存器的数据存入存储器。因为协处理器可以支持它自己的数据类型,所以每个寄存器传送的字数与协处理器有关。ARM产生存储器地址,但协处理器控制传送的字数。协处理器可能执行一些类型转换作为传送的一部分(例如,浮点协处理器将读取的值转换成它的80位内部表示形式)。
协处理器数据存取指令类似前面介绍的字和无符号字节数据存取指令的立即数偏移格式,但偏移量限于8位而不是12位。
可使用自动变址以及前变址和后变址寻址。
二进制编码
协处理器数据存取指令的二进制编码见图
说明
本指令可用于任何可能存在的协处理器。如果没有一个协处理器接受它,则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]
STCEQL p5,C1,[R0],#4
注意事项
N和CRd域的解释与协处理器有关,以上用法是推荐的用法,且最大限度地与ARM开发工具兼容。
如果地址不是字对齐的吗,则最低2位有效将被忽略,但一些ARM系统可能产生异常。
字的存取数目由协处理器控制。ARM将连续产生后续地址,直到协处理器指示存取应该结束。在数据存取的过程中ARM将不影响中断请求,所以协处理器设计者应注意。因为存取非常长的数据将会影响系统中断响应时间。将最大存取长度限制到16个字将确保协处理器数据存取的时间不会长于存取多寄存器指令的最坏状况。
凌阳教育,专注嵌入式人才培养多年,完善的培养方案,强大的师资,合理的课程安排,成功从小白蜕变为嵌入式工程师。想了解凌阳教育,或者获得更多嵌入式学习资料的免费下载,请点击www.sunplusedu.com访问凌阳教育官