• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >嵌入式开发 > ARM指令的寻址方式

ARM指令的寻址方式

作者:汇编爱好者 字体:[增加 减小] 来源:互联网 时间:2017-06-17

汇编爱好者通过本文主要向大家介绍了arm寻址方式,arm的寻址方式有哪些,arm寻址,指令寻址方式,指令系统的寻址方式等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
</div>     所谓寻址方式就是处理器根据指令中给出的地址信息来寻找物理地址的方式。目前ARM指令系统支持如下几种常见的寻址方式。
一、立即寻址
    立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址。例如以下指令:
ADD  R0,R0,#1            ;R0←R0+1
ADD  R0,R0,#0x3f         ;R0←R0+0x3f
    在以上两条指令中,第二个源操作数即为立即数,要求以“#”为前缀,对于以十六进制表示的立即数,还要求在“#”后加上“0x”或“&”。
二、寄存器寻址
    寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。以下指令:
ADD  R0,R1,R2             ;R0←R1+R2
    该指令的执行效果是将寄存器R1和R2的内容相加,其结果存放在寄存器R0中。
三、寄存器间接寻址
    寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。例如以下指令:
ADD R0,R1,[R2]             ;R0←R1+[R2]
LDR  R0,[R1]               ;R0←[R1]
STR  R0,[R1]               ;[R1]←R0
在第一条指令中,以寄存器R2的值作为操作数的地址,在存储器中取得一个操作数后与R1相加,结果存入寄存器R0中。
第二条指令将以R1的值为地址的存储器中的数据传送到R0中。
第三条指令将R0的值传送到以R1的值为地址的存储器中。
四、基址变址寻址
    基址变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。变址寻址方式常用于访问某基地址附近的地址单元。采用变址寻址方式的指令常见有以下几种形式,如下所示:
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中。
在第二条指令中,将寄存器R1的内容加上4形成操作数的有效地址,从而取得操作数存入寄存器R0中,然后,R1的内容自增4个字节。
在第三条指令中,以寄存器R1的内容作为操作数的有效地址,从而取得操作数存入寄存器R0中,然后,R1的内容自增4个字节。
在第四条指令中,将寄存器R1的内容加上寄存器R2的内容形成操作数的有效地址,从而取得操作数存入寄存器R0中。
五、多寄存器寻址
采用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送。这种寻址方式可以用一条指令完成传送最多16个通用寄存器的值。以下指令:
LDMIA R0,{R1,R2,R3,R4}       ;R1←[R0]
                                 ;R2←[R0+4]
                                 ;R3←[R0+8]
                                 ;R4←[R0+12]
该指令的后缀IA表示在每次执行完加载/存储操作后,R0按字长度增加,因此,指令可将连续存储单元的值传送到R1~R4。
六、 相对寻址
与基址变址寻址方式相类似,相对寻址以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。以下程序段完成子程序的调用和返回,跳转指令BL采用了相对寻址方式:
BL   NEXT                   ;跳转到子程序NEXT处执行
……                            
NEXT
……                            
MOV  PC,LR             ;从子程序返回
七、堆栈寻址
堆栈是一种数据结构,按先进后出(First In Last Out,FILO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。
当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(Full Stack),而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈(Empty Stack)。
同时,根据堆栈的生成方式,又可以分为递增堆栈(Ascending  Stack)和递减堆栈(Decending Stack),当堆栈由低地址向高地址生成时,称为递增堆栈,当堆栈由高地址向低地址生成时,称为递减堆栈。这样就有四种类型的堆栈工作方式,ARM微处理器支持这四种类型的堆栈工作方式,即:
-  满递增堆栈:堆栈指针指向最后压入的数据,且由低地址向高地址生成。
-  满递减堆栈:堆栈指针指向最后压入的数据,且由高地址向低地址生成。
-  空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成。
-  空递减堆栈:堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成。
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ARM指令的寻址方式
  • ARM指令格式及其寻址方式

相关文章

  • 2017-06-05 java中yield,sleep,wait,notify都是软中断吗?
  • 2017-06-05 cpufamily,分成mips,spark,I960这是怎么分类的?
  • 2017-06-05 S5PV210在WINCE60下能不能做开机快速倒车?像Prima那样!
  • 2017-06-05 51单片机上电P1口默认为高电平的问题
  • 2017-06-05 如何在路由器的wifi中植入广告
  • 2017-06-05 对Luatable存储过程不太理解
  • 2017-06-05 ili9341的调试问题
  • 2017-06-05 需要用并口模拟脉冲信号来驱动步进电机
  • 2017-06-05 keil报错L104,请大神指教
  • 2017-06-05 求pci口的详细资料

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 怎样写个驱动程序用来监控抓取HID设备ReportDescriptor数据?
    • 请教一个基础问题。
    • 浏览器输入baiducom就会闪一下其他的网址
    • 嵌入式系统硬件电路设计六大要点
    • linux启动问题
    • 有没有哪位高手建议一本USB20开发的参考书?
    • 在Delphi中调用WinIodll中的InitializeWinIo失败?
    • VxWorks移植研华、凌华单板电脑问题
    • CC1101接收部分求助
    • 关于USB设备的问题,在线等

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有