- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ARM指令集 数据处理指令 转移指令 程序状态寄存器访问指令 加载/存储指令 伪指令 在ARM汇编指令中,有一类特殊的指令没有对应的指令编码。在汇编时根据情况会解释为相应的ARM、Thumb-2或Thumb-2之前的Thumb指令的组合。这类指令被ARM公司称为“伪指令”。 需要特别注意的是,这几条指令和第9章中介绍的伪指令虽然形式上类似,但作用却大不相同。第9章中介绍的伪指令用于指导汇编器完成相应的汇编工作,符合通常意义上对伪指令的定义,而本节所介绍的这几条伪指令的作用和正常的ARM汇编指令类似,设计这几条伪指令的目的主要是使用一条指令替代多条指令的组合,方便程序员完成汇编程序设计工作,其作用类似于80x86处理器的宏指令。 伪指令 ADR/ADRL 将相对于程序或相对于寄存器的地址载入寄存器中(中等范围,与位置无关)。 指令书写格式:ADR(ADRL)[cond] Rd, label …… MOV R0, #0x18 ; 给R0赋值用于查表 ADR R3, JumpTable ; 装载跳转表的首地址 LDR PC, [R3,R0,LSL#2] ; 查表,将查到的地址赋给PC JumpTable …… 伪指令 LDR 将32位常数或地址载入寄存器(无范围限制,但与位置相关) 指令书写格式:LDR[cond][.W] Rd, =expr/=label_expr expr取值为一个数值常数 如果expr的值位于范围内,则汇编器将会生成一个MOV或MVN指令 如果expr的值不在MOV或MVN指令的范围内,则汇编器会将常数放入文字池中,并会生成一个相对于程序的LDR指令,该指令可从文字池中读取此常数 指令举例 LDR R3,=0xFF0 ; 把立即数0xFF0赋值给R3 LDR R2,=place ; 把标号place对应的地址赋值给R2 伪指令 MOV32 将32位常数或地址载入寄存器(无范围限制,但与位置相关) 仅可用于ARMv6T2及更高版本 指令书写格式:MOV32[cond][.W] Rd, =expr expr可以是symbol(程序区域中的标号)、constant(任何32位常数)或symbol+constant(一个加上32位常数的标号)。 伪指令 UND 生成无体系结构定义的指令 指令书写格式:UND[cond][.W] #expr 执行未定义指令会引发未定义指令异常。程序员可以利用指令异常完成相应的异常处理。 作业 8.2、8.3、8.4、8.5、8.7、8.8、8.9 ARM大小端是通过配置协处理器CP15寄存器1的bit7来修改大小端格式。 文字池:汇编程序用来集中存储源程序中所给出的文字值的一个存储区。 ADR伪指令格式 :ADR{cond} register, expr 地址表达式expr的取值范围: 当地址值是字节对齐时,其取指范围为: +255 ~255B; 当地址值是字对齐时,其取指范围为: -1020 ~ 1020B; ADRL伪指令格式:ADRL{cond} register, expr 地址表达式expr的取值范围: 当地址值是字节对齐时,其取指范围为: -64K~64K; 当地址值是字对齐时,其取指范围为: -256K~256K; 前索引寻址方式:基址带偏移作为传送地址 后索引寻址方式:基址不带偏移传送地址,且传送后自动更新基址寄存器 * SWI:0* TST指令:如果指令的结果为0,则Z=1;不等于0,则Z=0 EQ:Z=1;NE:Z=0 软中断指令的编码格式 SWI{cond} immed_24 指令执行的条件码 指令传递的参数(24位立即数,其值 为0~224-1); 执行时CPU忽略该参数,交OS处理。 * */95 数据处理指令 ARM的数据处理指令大致可分为以下几类: 数据传送指令:MOV、MVN 算术运算指令:ADD、SUB、RSB、ADC、SBC、RSC、 MUL、MLA、UMULL、UMLAL、SMULL、SMLAL 逻辑运算指令 :AND、ORR、EOR、BIC 比较指令:CMP、CMN、TST、TEQ 数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操作。 所有ARM数据处理指令均可选择使用S后缀,以使指令影响状态标志。 */95 数据传送指令 MOV R11,#0xF000000B ;R1= 0xF000000B MOV R0,R1 ;R0=R1 MOVS R3,R1,LSL #2 ;R3=R12,并影响标志位 MOV PC,LR ;PC=LR,子
原创力文档


文档评论(0)