- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式系结构
嵌入式系统结构 主讲教师: 邱铁 E_mail: qiutie@ Tel: 参考教材: 1.嵌入式系统开发与应用,田泽.北京航空航天大学出版社 2.嵌入式系系结构与编程,杜春蕾. 清华大学出版社 第四讲 ARM指令集 本讲将详细介绍各ARM指令,并给出一些典型的ARM功能代码段。 本讲主要内容有 4.1 ARM指令集 4.1.1 跳转指令 4.1.2 数据处理指令 4.1.3 乘法指令 4.1.4 杂类的算术指令 4.1.5 状态寄存器访问指令 4.1.6 Load/Store内存访问指令 4.1.7 批量Load/Store内存访问指令 4.1.8 信号量操作指令 4.1.9 异常中断产生指令 4.1.10ARM协处理器指令 4.1.1跳转指令 在ARM中有两种方式可以实现程序的跳转:一种是跳转指令;另一种是直接向寄存器(R15)中写入目标地址值。 通过直接向PC寄存器中写入目标地址值可以实现在4GB的地址空间中任意跳转,这种跳转指令又成为长跳转。如果在长跳转指令之前使用MOV LR,PC等指令,可以保存将来返回的地址值,就实现了在4GB的地址空间中的子程序调用。 跳转指令 ARM的跳转指令可以从当前指令向前或向后的32MB的地址空间跳转。这类跳转指令有以下4种: B 跳转指令 BL 带返回的跳转指令 BLX 带返回和状态切换的跳转指令 BX 带状态切换的跳转指令 1. B(跳转指令)及BL(带返回的跳转指令) B指令和BL指令均可以跳转到指令中的目标地址,这两个指令和目标地址处的指令都属于ARM指令集。二者也都可以根据CPSR中条件标志位的值与指令中的执行条件决定是否执行跳转操作。 二者的不同之处在于,B指令仅仅执行跳转操作;BL指令同时还将PC寄存器的值保存到LR寄存器中。 B(跳转指令)及BL(带返回的跳转指令) 指令的编码格式: 指令的语法格式: B{L}{cond} target_address B(跳转指令)及BL(带返回的跳转指令) 其中: L决定是否保存返回地址。当有L时,当PC寄存器的值将保存到LR寄存器中;当无L时,指令仅执行跳转,当前PC寄存器的值将不会保存到LR寄存器中。 cond为指令执行的条件码。 target_address为指令跳转的目标地址。这个目标地址的计算方法是:将指令中的24位带符号的补码立即数扩展为32位;将此32位数左移两位将得到的值增加到PC寄存器中,即得到跳转的目标地址。跳转的范围大致为-32MB~+32MB。 跳转指令 指令的使用 BL指令用于实现子程序调用。子程序的返回可以通过将LR寄存器中的值复制到PC寄存器中来实现。通常有3种方法实现这种复制: BX R14 MOV PC, R14 当子程序入口中使用了 STMFD R13!,{registers,R14}时, 可以用指令LDMFD R13!,{registers,PC}返回 B(跳转指令)及BL(带返回的跳转指令) 示例解析 2. BLX(1) 第一种格式的BLX指令记作BLX(1)。 BLX(1)指令从ARM指令集跳转到指令中指定的目标地址,并将程序状态切换为Thumb状态,该指令同时将PC寄存器中的内容复制到LR寄存器中。 本指令属于无条件执行的指令(即条件码为AL) BLX(1) 指令的编码格式: 指令的语法格式: BLX target_address 其中:target_address的用法与B及BL指令中的用法相同。 H位加到目标地址的第一位(为1时半字操作) BLX(1) 指令的使用: 当子程序为Thumb指令集,而调用者为ARM指令集时,可以通过BLX指令实现子程序调用和程序状态的切换。 子程序的返回可以通过将LR寄存器(R14)的值复制到PC寄存器中来实现。 BX R14 当子程序入口中使用了PUSH {registers,R14}时,可以用指令POP{registers,PC} 3. BLX(2) 第一种格式的BLX指令记作BLX(2)。 BLX(2)指令从ARM指令集跳转到指令中指定的目标地址,目标地址的指令可以是ARM指令,也可以是Thumb指令。目标地址放在指令中的寄存器Rm中,该地址的bit[0]值为0,目标地址出的指令类型由CPSR中的T位决定。该指令同时将PC寄存器的内容复制到LR寄存器中。 BLX(2) 指令的编码格式: 指令的语法格式:
原创力文档


文档评论(0)