arm指令的寻址方式

arm指令的寻址方式

ID:20392311

大小:26.00 KB

页数:5页

时间:2018-10-13

arm指令的寻址方式_第1页
arm指令的寻址方式_第2页
arm指令的寻址方式_第3页
arm指令的寻址方式_第4页
arm指令的寻址方式_第5页
资源描述:

《arm指令的寻址方式》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、ARM指令的寻址方式  所谓寻址方式就是处理器根据指令中给出的地址信息来寻找物理地址的方式。目前ARM指令系统支持如下几种常见的寻址方式。  一、立即寻址  立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址。例如以下指令:  ADDR0,R0,#1;R0←R0+1  ADDR0,R0,#0x3f;R0←R0+0x3f  在以上两条指令中,第二个源操作数即为立即数,要求以“#”为前缀,对于以十六进制表示的立即数,还要求在“#”后加上“0x”或“&”。

2、  二、寄存器寻址  寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。以下指令:  ADDR0,R1,R2;R0←R1+R2  该指令的执行效果是将寄存器R1和R2的内容相加,其结果存放在寄存器R0中。  三、寄存器间接寻址  寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。例如以下指令:  ADDR0,R1,[R2];R0←R1+[R2]  LDRR0,[R1];R0←[R1]  STRR0,[R1];[R1]←R0  在第一条指令中,以寄存器R2的值

3、作为操作数的地址,在存储器中取得一个操作数后与R1相加,结果存入寄存器R0中。  第二条指令将以R1的值为地址的存储器中的数据传送到R0中。  第三条指令将R0的值传送到以R1的值为地址的存储器中。  四、基址变址寻址  基址变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。变址寻址方式常用于访问某基地址附近的地址单元。采用变址寻址方式的指令常见有以下几种形式,如下所示:  LDRR0,[R1,#4];R0←[R1+4]  LDRR0,[R1,#4]!;R0←[R1+4]、R1←R1+4  

4、LDRR0,[R1],#4;R0←[R1]、R1←R1+4  LDRR0,[R1,R2];R0←[R1+R2]  在第一条指令中,将寄存器R1的内容加上4形成操作数的有效地址,从而取得操作数存入寄存器R0中。  在第二条指令中,将寄存器R1的内容加上4形成操作数的有效地址,从而取得操作数存入寄存器R0中,然后,R1的内容自增4个字节。  在第三条指令中,以寄存器R1的内容作为操作数的有效地址,从而取得操作数存入寄存器R0中,然后,R1的内容自增4个字节。  在第四条指令中,将寄存器R1的内容加上寄存器R2的内容形成操作数的有效地址,从而取得操作数存入寄存器

5、R0中。  五、多寄存器寻址  采用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送。这种寻址方式可以用一条指令完成传送最多16个通用寄存器的值。以下指令:  LDMIAR0,{R1,R2,R3,R4};R1←[R0]  ;R2←[R0+4]  ;R3←[R0+8]  ;R4←[R0+12]  该指令的后缀IA表示在每次执行完加载/存储操作后,R0按字长度增加,因此,指令可将连续存储单元的值传送到R1~R4。  六、相对寻址  与基址变址寻址方式相类似,相对寻址以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效

6、地址。以下程序段完成子程序的调用和返回,跳转指令BL采用了相对寻址方式:  BLNEXT;跳转到子程序NEXT处执行  ……  NEXT  ……  MOVPC,LR;从子程序返回  七、堆栈寻址  堆栈是一种数据结构,按先进后出(FirstInLastOut,FILO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。  当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(FullStack),而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈(EmptyStack)。  同时,根据堆栈的生成方式,又可以分为递增堆栈(

7、AscendingStack)和递减堆栈(DecendingStack),当堆栈由低地址向高地址生成时,称为递增堆栈,当堆栈由高地址向低地址生成时,称为递减堆栈。这样就有四种类型的堆栈工作方式,ARM微处理器支持这四种类型的堆栈工作方式,即:  -满递增堆栈:堆栈指针指向最后压入的数据,且由低地址向高地址生成。  -满递减堆栈:堆栈指针指向最后压入的数据,且由高地址向低地址生成。  -空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成。  -空递减堆栈:堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。