[高等教育]ARM指令系统与汇编程序设计.docVIP

[高等教育]ARM指令系统与汇编程序设计.doc

  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文档。上传文档
查看更多
[高等教育]ARM指令系统与汇编程序设计

第4章 ARM指令系统与汇编程序设计 4.1 ARM指令集概述 1.ARM处理器中包含大量寄存器,这些寄存器在指令集中都可用于多种用途(目的寄存器、源寄存器、地址指针等); 2.ARM指令集中所有指令均可条件执行,即依据条件域设定条件满足与否来决定是否执行; 3.ARM处理器采用Load/Store体系结构(指令集为加载/存储型),即ARM指令集仅能处理寄存器中的数据,而且处理结果都要放回寄存器中,存储器访问需要通过专门的加载/存储指令来实现; 4.ARM指令集均为“3地址”指令,指令中有两个源操作数寄存器和一个结果寄存器,且均可独立设定; 5.ARM处理器的ALU操作和移位操作可同时完成,即在单时钟周期内执行单条指令可同时完成一项普通的移位操作和一项普通ALU操作。 6.ARM处理器可通过协处理器指令使ARM指令集得以扩展,包括在编程模式下增加新的寄存器和数据类型; 7.ARM处理器在Thumb体系结构中以高密度16位压缩形式表示指令集(Thumb指令集)。 4.1.2ARM指令基本格式ARM指令的助记符格式为: opcode{cond}{S} Rd,Rn,op2; 注释 举例:ADDEQS R1,R2,#5; R1=R2+5 其中,opcode表示“操作码”(如ADD),后缀{cond}表示“条件域”(如EQ表示该指令只有当CPSR中Z标志置位才执行),后缀{S}表示指令执行结果将影响CPSR寄存器值;空格之后的Rd表示“目的寄存器”(如R1),第一个逗号之后Rn表示“第一操作数1(操作数1)”(如R2),第二个逗号之后的op2表示“第二操作数(操作数2)”(如#5表示立即数5)。分号之后为“注释”,由文字和符号组成(如R1=R2+5)。 4.1.3ARM指令条件码域0000 EQ Z 置位 相等 0001 NE Z 清零 不相等 0010 CS C 置位 无符号数大于或等于 0011 CC C 清零 无符号数小于 0100 MI N 置位 负数 0101 PL N 清零 正数或零 0110 VS V 置位 溢出 0111 VC V 清零 未溢出 1000 HI C 置位,Z 清零 无符号数大于 1001 LS C 清零,Z 置位 无符号数小于或等于 1010 GE N 等于V 带符号数大于或等于 1011 LT N 不等于V 带符号数小于 1100 GT Z 清零(且N等于V) 带符号数大于 1101 LE Z 置位(或N不等于V) 带符号数小于或等于 1110 AL 忽略 无条件执行 4.2 ARM寻址方式LSR)、算术右移(ASR)、循环右移(ROR) 和带扩展的循环右移(RRX),括号内为相应操作的助记符,各种移位操作所实现的功能详见本节4.3.8。举例如下: ADD R0,R1,R2,ROR R3; R0=R1+R2循环右移R3位 MOV R0,R1,LSL #3; R0=R1逻辑左移3位 4.2.4 寄存器间接寻址 寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。例如: ADD R0, R1, [R2]; R0←R1+[R2] 该指令中的第二操作数以寄存器R2的值作为地址,利用这个地址在存储器中取得,实际执行效果是将这个操作数与R1相加,结果存入寄存器R0中。 4.2.5 基址变址寻址 基址变址寻址就是将寄存器(基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。变址寻址方式常用于访问某基地址附近的地址单元。采用变址寻址方式的指令常见有以下几种形式: LDR R0, [R1,#4]; R0←[R1+4] LDR R0, [R1,#4]!; R0←[R1+4]、R1←R1+4 LDR R0, [R1],#4; R0←[R1]、R1←R1+4 LDR R0, [R1,R2]; R0←[R1+R2] 第一条指令将寄存器R1的内容加上4形成操作数的有效地址,从而取得操作数存入寄存器R0中;第二条指令与第一条指令的区别在于将所取得的操作数存入寄存器R0之后,再将R1的内容自增4个字节;第三条指令先以寄存器R1的内容作为操作数的有效地址,从而取得操作数存入寄存器R0,然后将R1的内容自增4个字节;第四条指令将寄存器R1的内容加上寄存器R2的内容形成操作数的有效地址,从而取得操作数存入寄存器R0中。 4.2.6 多寄存器寻址 采用多寄存器寻址方式,一条指令可以完成多个寄存器(最多16个)值的传送。例如: LDMIA R0, {R1, R2, R3, R4}; R1←[R0],R2←[R0+4],R3←[R0+8],R4←[R0+12] 指令LDM的后缀IA 表示,在每次执行完加载/存储

文档评论(0)

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

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

1亿VIP精品文档

相关文档