ARM寄存器详解.docx

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

ARM 处理器有二十七个寄存器,其中一些是在一定条件下使用的,所以一次只能使用十六个。R0~R7:是通用寄存器并可以用做任何目的。R8~R12:是通用寄存器,但是在切换到FIQ模式的时候,使用它们的影子(shadow)寄存器。R13:被称为栈指针寄存器,常用来保存栈指针。R14:链接寄存器,常用来保存函数返回地址R15:是程序指针PCCPSR:(Current Program Status Register)当前程序状态寄存器,CPSR寄存期保存当前程序运行的状态。0 0 0 0 0 User26 模式0 0 0 0 1 FIQ26 模式0 0 0 1 0 IRQ26 模式0 0 0 1 1 SVC26 模式1 0 0 0 0 User 模式1 0 0 0 1 FIQ 模式1 0 0 1 0 IRQ 模式1 0 0 1 1 SVC 模式1 0 1 1 1 ABT 模式1 1 0 1 1 UND 模式ARM寻址方式1.立即数寻址ARM 指令的立即数寻址是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数。ADD R0,R0,#1 ;R0←R0 + 1ADD R0,R0,#0x3A ;R0←R0 + 0x3A在以上 2 条指令中,第2个源操作数即为立即数,实际使用时以“#”符号为前缀。2.寄存器寻址寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。如以下的指令。ADD R0,R1,R2 ;R0←R1 + R2该指令的执行效果是将寄存器 R1和R2的内容相加,其结果存放在寄存器R0中。3.寄存器间接寻址寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。例如以下指令。ADD R0,R1,[R2] ;R0←R1 + [R2]LDR R0,[R1] ;R0←[R1]在第 1 条指令中,以寄存器 R2 的内容作为操作数的地址,然后与 R1 相加,其结果存入寄存器R0中。第2条指令将以 R1 的值为地址的存储器中的内容送到寄存器R0中。4.基址变址寻址基址变址的寻址方式就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。如下面的几条指令所示。LDR R0,[R1,#0x0A] ;R0←[R1 + 0x0A]LDR R0,[R1,#0x0A]! ;R0←[R1 + 0x0A]、R1←R1 + 0x0A在第1条指令中,将寄存器 R1 的内容加上0x3A 形成操作数的有效地址,将该地址处的操作数送到寄存器R0中。在第2条指令中,将寄存器R1的内容加上0x0A形成操作数的有效地址,从而取得操作数存入寄存器R0中,然后,R1的内容自增0x0A个字节。5.多寄存器寻址采用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送。这种寻址方式可以用一条指令完成传送最多 16 个通用寄存器的值。比如下面的指令。LDMIA R0,{R1,R2,R3,R4} ;R1←[R0];R2←[R0 + 4];R3←[R0 + 8];R4←[R0 + 12]该指令的后缀IA表示在每次执行完加载/存储操作后,R0 按字长度增加,因此,指令可将连续存储单元的值传送到R1~R4。6.相对寻址与基址变址寻址方式相类似,相对寻址以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。比如下面的程序段完成子程序的调用和返回,跳转指令BL采用了相对寻址方式。BL NEXT ;跳转到子程序 NEXT 处执行……NEXT……MOV PC,LR ;从子程序返回7.堆栈寻址堆栈是一种数据结构,按先进后出(First In Last Out,FILO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。根据堆栈的生成方式,堆栈又可以分为递增堆栈(Ascending Stack)和递减堆栈(Decending Stack),当堆栈由低地址向高地址生成时,称为递增堆栈;当堆栈由高地址向低地址生成时,称为递减堆栈。这样就有4种类型的堆栈工作方式,ARM 微处理器支持以下4种类型的堆栈工作方式。(1)满递增堆栈:堆栈指针指向最后压入的数据,并且堆栈以递增方式向上生成。(2)满递减堆栈:堆栈指针指向最后压入的数据,并且堆栈以递减方式向下生成。(3)空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成。(4)空递减堆栈:堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成。分支跳转指令B{条件} 地址B、BL是一个分支跳转指令,它是在R15寄存器的基础上跳转一个偏移地址,跳转范围是由汇

文档评论(0)

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

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

1亿VIP精品文档

相关文档