ARM9指令系统.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
习题3 1. ARM指令有哪几种寻址方式?试分别叙述各自的特点并举例说明。 2.叙述ARM9指令的分类有哪些。 3.简述ARM9的LDM/STM堆栈指令中空、满、递增、递减的含义。 4.BX和BL指令有什么不同? (15)UMULL指令 格式为: UMULL{条件}{S} 目的寄存器Low,目的寄存器低High,操作数1,操作数2 UMULL指令是无符号乘法指令,完成将操作数1与操作数2的乘法运算,并把结果的低32位放置到目的寄存器Low中,结果的高32位放置到目的寄存器High中,同时可以根据运算结果设置CPSR中相应的条件标志位。 其中,操作数1和操作数2均为32位的无符号数。 算术逻辑运算指令 指令示例: UMULL R1,R2,R3,R4 ;R1 = (R3 × R4)的低32位 ;R2 = (R3 × R4)的高32位 算术逻辑运算指令 (16)UMLAL指令 格式为: UMLAL{条件}{S} 目的寄存器Low,目的寄存器低High,操作数1,操作数2 UMLAL指令是无符号长乘法指令,完成将操作数1与操作数2的乘法运算,并把结果的低32位同目的寄存器Low中的值相加后又放置到目的寄存器Low中,结果的高32位同目的寄存器High中的值相加后又放置到目的寄存器High中,同时可以根据运算结果设置CPSR中相应的条件标志位。其中,操作数1和操作数2均为32位的无符号数。 算术逻辑运算指令 对于目的寄存器Low,在指令执行前存放64位加数的低32位,指令执行后存放结果的低32位。 对于目的寄存器High,在指令执行前存放64位加数的高32位,指令执行后存放结果的高32位。 指令示例: UMLAL R1,R2,R3,R4 ;R1 = (R3× R4) 的低32位 + R1 ;R2 = (R3× R4) 的高32位 + R2 算术逻辑运算指令 比较和测试指令 (1)CMP指令 格式为: CMP{条件} 操作数1,操作数2 CMP指令是比较指令,该指令是做一次减法运算,但不存储结果,只是刷新条件标志位,根据条件标志位判断操作数的大小。 对条件位的影响是:结果为正数则N=0,结果为负数则N=1;结果为0则Z=1,结果不为0则Z=0;如果产生借位则C=0,没有借位则C=1;结果是符号溢出则V=1,否则V=0。 指令示例: CMP R1,#0x30 ;比较R1和0x30 ADDCS R5,R5,#0x20 ;如果C=1,则R5=R5+0x20 ADDCC R5,R5,#0x10 ;如果C=0,则R5=R5+0x10 比较和测试指令 (2)CMN指令 格式为: CMN{条件} 操作数1,操作数2 CMN指令是比较非指令,也是做一次减法运算,用第1操作数减去第2操作数的非值,结果不保存,只是刷新条件标志位,对条件标志位的影响和比较指令CMP相同。 比较和测试指令 指令示例: CMN R1,#0x00 ;比较R1和0xFFFFFFFF ADDCS R5,R5,#0x20 ;如果C=1,则R5=R5+0x20 ADDCC R5,R5,#0x10 ;如果C=0,则R5=R5+0x10 比较和测试指令 (3)TST指令 格式为: TST{条件} 操作数1,操作数2 TST指令是位测试指令,用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的与运算,并根据运算结果更新CPSR中条件标志位的值。 指令示例: TST R2,#0x01 ;将寄存器R1的值与立即数 0x01按位与,并根据结果设置CPSR的标志位,用来判断R2中最低位是否为0。 比较和测试指令 (4)TEQ指令 格式为: TEQ{条件} 操作数1,操作数2 TEQ指令是测试指令,用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的异或运算,并根据运算结果更新CPSR中条件标志位的值。该指令通常用于比较操作数1和操作数2是否相等。 指令示例: TEQ R1,#0x10 ;将寄存器R1的值与0x10按位异或,并根据结果设置 ;CPSR的标志位,若Z=1则表示R1的内容是0x10 比较和测试指令 3.2.5 ARM 分支指令 在ARM指令集中,没有专门的子程序调用指令,把分支和子程序调用看成是同一种操作,分支指令用于实现程序流程的跳转,在ARM程序中可以通过使用专门的跳转指令或是直接向程序计数器PC写入跳转地址值的方法来实现。 通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,在跳转之前结合使用MOV LR,PC等类似指令,可以保存

文档评论(0)

0520 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档