网站大量收购独家精品文档,联系QQ:2885784924

ARM指令大全的.doc

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ARM指令大全的

ARM指令集详解 ARM可以用两套指令集:ARM指令集和Thumb指令集。本文介绍ARM指令集。在介绍ARM指令集之前,先介绍指令的格式。 1? 指令格式 ??????? cond? 执行条件,如EQ,NE 等 ??????? S? 是否影响CPSR 寄存器的值,书写时影响CPSR,否则不影响 ??????? Rd? 目标寄存器 ??????? Rn? 第一个操作数的寄存器 ??????? operand2? 第二个操作数 ??????? 指令格式举例如下: ??????? LDR R0,[R1] ;读取R1 地址上的存储器单元内容,执行条件AL ??????? BEQ DATAEVEN ;跳转指令,执行条件EQ,即相等跳转到DATAEVEN ??????? ADDS R1,R1,#1 ;加法指令,R1+1=R1 影响CPSR 寄存器,带有S ??????? SUBNES R1,R1,#0xD;条件执行减法运算(NE),R1-0xD=R1,影响CPSR 寄存器,带有S ??????? (2)第2个操作数 ??????? 在ARM 指令中,灵活的使用第2个操作数能提高代码效率,第2个操作数的形式如下: ??????? #immed_8r ??????? 常数表达式,该常数必须对应8 位位图,即常数是由一个8 位的常数循环移位偶数位得到。 ??????? 合法常量 ??????? 0x3FC、0、0xF0000000、200、0xF0000001等都是合法常量。 ??????? 非法常量 ??????? 0x1FE、511、0xFFFF、0x1010、0xF0000010等都是非法常量。 ??????? 常数表达式应用举例如下: ??????? MOV R0,#1 ;R0=1 ??????? AND R1,R2,#0x0F ;R2 与0x0F,结果保存在R1 ??????? LDR R0,[R1],#-4 ;读取R1 地址上的存储器单元内容,且R1=R1-4 ??????? Rm ??????? 寄存器方式,在寄存器方式下操作数即为寄存器的数值。 ??????? 寄存器方式应用举例: ??????? SUB R1,R1,R2 ;R1-R2=>R1 ??????? MOV PC,R0 ;PC=R0,程序跳转到指定地址 ??????? LDR R0,[R1],-R2 ;读取R1 地址上的存储器单元内容并存入R0,且R1=R1-R2 ??????? Rm, shift ??????? 寄存器移位方式。将寄存器的移位结果作为操作数,但RM 值保存不变,移位方法如下: ??????? ASR #n? 算术右移n 位(1≤n≤32) ??????? LSL #n? 逻辑左移n 位(1≤n≤31) ??????? LSR #n? 逻辑左移n 位(1≤n≤32) ??????? ROR #n? 循环右移n 位(1≤n≤31) ??????? RRX? 带扩展的循环右移1位 ??????? type Rs? 其中,type 为ASR,LSL,和ROR 中的一种;Rs 偏移量寄存器,低8位有效,若其值大于或等于32,则第2 个操作数的结果为0(ASR、ROR例外)。 ??????? 寄存器偏移方式应用举例: ??????? ADD R1,R1,R1,LSL #3 ;R1=R1*9 ??????? SUB R1,R1,R2,LSR#2 ;R1=R1-R2*4 ??????? R15 为处理器的程序计数器PC,一般不要对其进行操作,而且有些指令是不允许使用R15,如UMULL 指令。 ??????? (3)条件码 ??????? 使用指令条件码,可实现高效的逻辑操作,提高代码效率。表A-1给出条件码表。 表A-1? 条件码表 ??????? 对于Thumb指令集,只有B 指令具有条件码执行功能,此指令条件码同表A-?,但如果为无条件执行时,条件码助记符“AL”不能在指令中书写。 ??????? 条件码应用举例如下: ??????? 比较两个值大小,并进行相应加1 处理,C 代码为: ??????? if(a>b)a++??? ??? ; ??????? else b++??? ??? ??? ; ??????? 对应的ARM 指令如下。其中R0为a,R1为b。 ??????? CMP R0,R1 ??? ??? ; R0 与R1 比较 ??????? ADDHI R0,R0,#1 ??? ??? ; 若R0>R1,则R0=R0+1 ??????? ADDLS R1,R1,#1 ??? ??? ;若R0<=R1,则R1=R1+1 ??????? 若两个条件均成立,则将这两个数值相加,C代码为: ??????? If((a!=10)(b!=20)) a=a

文档评论(0)

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

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

1亿VIP精品文档

相关文档