- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1.ARM寄存器到协处理器寄存器的数据传送指令MCR MCR指令将ARM处理器的寄存器中的数据传送到协处理器的寄存器中。如果协处理器不能成功的执行该操作,将产生未定义的指令异常中断。 例:MCR p6,2,R0,CR1,CR2,4??;指令将ARM寄存器R0中数据传送到协处理器p6的寄存器中,其中R0是存放源操作数的ARM寄存器,CR1和CR2是作为目标寄存器的协处理器寄存器,操作码1为2,操作码2为4 2.协处理器寄存器到ARM寄存器的数据传送指令MRC MRC指令将协处理器的寄存器中的数据传送到ARM处理器的寄存器中。如果协处理器不能成功的执行该操作,将产生未定义的指令异常中断 例:MRC p10,3,R3,CR3,CR4,6?? ; 指令将协处理器p10寄存器中的数据传送到ARM寄存器R3中,其中R3是存放目标操作数的ARM寄存器,CR3和CR4是作为目标寄存器的协处理器寄存器,操作码1为3,操作码2为6 4.8 异常产生指令 ARM处理器所支持的异常产生指令有两条: 软中断指令SWI 断点调试指令BKPT(用于ARM V5及以上的版本) 软中断指令SWI SWI(SoftWare Interrupt)指令用于产生软件中断,它将处理器置于管理模式(SVC),从地址0x08开始执行指令。 ARM通过这种机制实现用户模式对操作系统中特权模式的程序调用,也就是使用户程序调用操作系统的系统程序成为可能。 语法格式: SWI{cond} immed_24 说明:操作系统在SWI的异常处理程序中提供相应的系统服务,指令中24位的立即数指定用户程序调用系统例程的类型,相关参数通过通用寄存器传递。 执行过程: 将SWI后面指令地址保存到R14_svc; 将CPSR保存到SPSR_svc; 进入管理模式,将CPSR[4:0]设置为0b10011的将CPSR[7]设置为[1],禁止IRQ; 将PC设置为0x08,并且开始执行那里的指令。 返回时:MOVS PC,R14 例: SWI 0x02 ;该指令调用操作系统编号为2的系统例程 注意:当指令中24位的立即数被忽略时,用户程序调用系统例程的类型由通用寄存器R0的内容决定,同时,参数通过其他通用寄存器传递。 断点中断指令 BKPT (BreakPoinT)指令产生软件断点中断,可用于程序的调试。当BKPT指令执行时,处理器停止执行下面的指令并进入相应的BKPT入口程序(即调试程序)。 语法格式: BKPT immed_16 说明: immed_16为16位的立即数,此立即数被调试软件用来保存额外的断点信息。 第4章 ARM指令集系统 The End 作业 P82页/ 第四章的题4,5,8 批量数据加载/存储指令可以一次性实现一片连续的存储器单元和多个寄存器之间进行传送数据。 批量数据加载指令用于将一片连续的存储器中的数据传送到多个寄存器中; 批量数据存储指令能够实现将多个寄存器中的内容一次性的存放到一片连续的存储器中。 批量加载/存储指令 基本批量字数据加载/存储指令 批量加载:LDM {cond}addr_mode Rn {!}, registers 批量存储:STM {cond}addr_mode Rn {!}, registers 其中,Rn为基址寄存器,装有传送数据的起始地址。 Registers表示要加载或存储的寄存器列表。 主要用于块数据的存取、数据栈操作以及从子程序中返回等操作。 如果当PC包含在LDM指令的寄存器列表中时,指令从内存中读取字数据将被当作目标地址值,指令执行后程序将从目标地址处开始执行,即实现了跳转操作。 注意事项: * Rn不允许为程序计数器PC(R15) * 指令中寄存器和连续内存地址单元的对应关系:编号低的寄存器对应内存低地址单元,编号高的寄存器对应内存高地址单元。 * 如果指令中基址寄存器Rn在寄存器列表registers中,而且指令中寻址方式指定指令执行后更新基址寄存器Rn 的值,则指令执行会产生不可预知的结果。 存储情况示例 AREA Example1,CODE,READONLY ENTRY CODE32 START MOV R1,#0x9000 MOV R0,#0x11 MOV R2,#0x22 MOV R3,#0x33 MOV R4,#0x44 MOV R5,#0x55 STMDB R1!,{R0,R2-R5} STOP B STOP END 用户模式下的批量字数据加载/存储指令 语法格式 批量加载: LDM {cond}addr_mode R
文档评论(0)