ARM7TDMI的.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3.ARM 转移指令 (1) B 和 BL 转移和带链接转移。 B {cond} label BL{cond} label 其中: label为程序相对偏移表达式。 B(Branch)指令引起处理器转移到label。 BL(Branch and Link)指令将下一条指令的地址拷贝到R14(LR,链接寄存器),并引起转移到label。 机器级的B和BL指令限制在当前指令的±32 MB范围内。但是,即使label超出了该范围,也可以使用这些指令。 [例 子] B loop A BLE ng+8 BL subC BLLT rtX 请按照指令格式的规定,解释上述4条指令。 (2) BX 转移并可选地交换指令集。 BX {cond} Rm 其中:Rm 含有转移地址的寄存器。Rm的位[0]不用来作为地址的一部分。若Rm的位[0]为1,则指令将CPSR中的标志T置位,且将目标地址的代码解释为Thumb代码。若Rm的位[0]为0,则位[1]不能为1。 执行BX(Branch and optionally exchange)指令将引起处理器转移到由Rm指出的地址。若Rm的位[0]为1,则指令集变换到Thumb。 [例 子] BX R7 BXVS R0 请按照指令格式的规定,解释上述2条指令。 VS:V=1,溢出 (3) BLX 带链接转移并可选地交换指令集。这条指令有如下2种形式: 带链接无条件转移到程序相对偏移地址; BLX label 带链接有条件转移到寄存器中的绝对地址。 BLX {cond} Rm 其中: Rm含有转移地址的寄存器。Rm的位[0]不用来作为地址的一部分。若Rm的位[0]为1,则指令将CPSR中的标志T置位,且将目标地址的代码解释为Thumb代码。若Rm的位[0]为0,则位[1]就不能为1。 label 程序相对偏移表达式。 BLX (Branch with Link and optionally exchange)指令有如下用法; 将下一条指令的地址拷贝到R14中(LR,链接寄存器)。 转移到label或Rm中的地址。 若下面两条中的任何一条成立,则将指令集切换到Thumb指令,即 Rm的位[0]为1。 使用BLX label形式。 注意: 机器级的“BLX label”指令不能转移到当前指令±32 MB范围之外的地址。 “BLX label”不能是有条件的。 “BLX label始终引起处理器切换到Thumb态。 [例 子] BLX R2 BLXNE R0 BLX thumbsub 请按照指令格式的规定,解释上述3条指令。 5.杂项ARM指令 (1) SWI指令 软件中断 SWI{cond} immed_24 其中:immd_24为表达式,其值为0—224 - 1范围内的整数(24位整数)。 SWI (Soft Ware interrupt)指令引起SWI异常, 处理器模式变换为管理模式; SWI异常时CPSR保存到管理模式的SPSR中,执行转移到SWI向量。 [例 子] SWl 0x123456 使用SWI指令时,通常使用以下两种方法进行传递参数,SWI异常中断处理程序就可以提供相关的服务。这两种方法均由用户软件协定。 ① 指令中的24位立即数指定了用户请求的服务类型,参数通过通用寄存器传递。 MOV R0,#34 ;设置子功能号为34 SWI 12 ;调用12号软中断 SWI异常中断处理程序要通过读取引起软中断的SWI指令,并从指令中分离出24位立即数。 在SWI异常中断处理程序中,取出SWI立即数的步骤为: 首先确定引起软中断的SWI指令是ARM指令还是Thumb指令,这可 通过对SPSR访问得到; 然后取得该SWI指令的地址,这可通过访问LR寄存器得到; 接着读出指令,分解出立即数。 ② 指令中的24位立即数被忽略,用户请求的服务类型由寄存器R0、R1的值决定,参数通过其它通用寄存器传递。 MOV R0,#12 ;调用12号软中断 MOV R1,#34 ;设置子功能号为34 SWI 0 (2) MRS指令 将CPSR或SPSR的内容传送到通用寄存器。 MRS {cond} Rd,psr 其中: Rd 目标寄存器。Rd不允许为R15。 Psr CPSR或SPSR。 [例 子] MRS R1,CPSR ;将CPSR状态寄存器读取,保存到R1中 MRS R2,SPSR ;将SPSR状态寄存器读取,保存到R2中 MRS指令读取CPSR,可用来判断ALU的状态标志,或IRQ、FIQ中断是否允许等。

文档评论(0)

jgx3536 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档