• 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
  • 微信公众号
您的位置:首页 > 程序设计 >Android > ARM汇编中LDR伪指令和LDR指令

ARM汇编中LDR伪指令和LDR指令

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了arm 汇编指令 ldr,arm汇编ldr,arm ldr指令,arm ldr,arm中ldr等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

ARM汇编中LDR伪指令和LDR指令


ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令。比如想把数据从内存中某处读取到寄存器中,只能使用ldr比如:
ldr r0, 0x12345678
就是把0x12345678这个地址中的值存放到r0中。而mov不能实现这个功能,mov只能在寄存器之间移动数据,或者把立即数移动到寄存器中,这个和x86这种CISC架构的芯片区别最大的地方。x86中没有ldr这种指令,因为x86的mov指令可以将数据从内存中移动到寄存器中。


另外还有一个就是ldr伪指令,虽然ldr伪指令和ARM的ldr指令很像,但是作用不太一样。ldr伪指令可以在立即数前加上=,以表示把一个值(一般是一个地址)写到某寄存器中,比如:
ldr r0, =0x12345678
这 样,就把0x12345678这个值写到r0中了。所以,ldr伪指令和mov是比较相似的。只不过mov指令限制了立即数的长度为8位,也就是不能超过 512。而ldr伪指令没有这个限制。如果使用ldr伪指令时,后面跟的立即数没有超过8位,那么在实际汇编的时候该ldr伪指令是被转换为mov指令 的。
其实ldr指令可以装载一个32bit立即数的说法并不确切,因为实际上并不是这一条语句装载了一个32bit立即数,真正的汇编代码是将某个地址的值传递给r1,就是说需要一个地址存放0x12345678这个立即数。而且如果这个立即数可以用mov指令的形式来表达,会被编译器实际用mov来代替比 如:
ldr r1,=0x10
会变成
mov r1,#0x10

综述所述:ldr伪指令用于加载32位的立即数或一个地址值到指定寄存器。在汇编编译源程序时,ldr伪指令被编译器替换成一条合适的指令。若加载的常数未超出mov或mvn的范围,则使用mov或mvn指令代替该ldr伪指令,否则汇编器将常量放入文字池,并使用一条程序相对偏移的ldr指令从文字池读出常量。
ldr伪指令和ldr指令不是一个同东西。http://www.linuxso.com/linuxrumen/16306.html
  • adr adrl ldr mov总结整理

  • 2014-11-24 17:36 发表 系统分类:嵌入式系统 自定义分类:arm
    标签:arm

ADR这是一条小范围的地址读取伪指令,它将基于PC的相对偏移的地址值读到目标寄存器中。

使用的格式:ADR register,exper。

在编译源程序时,汇编器首先计算出当前PC值(当前指令位置)到exper的距离,然后会用一条ADD或者SUB指令来替换这条伪指令,例如:ADD register,PC,#offset_to_exper。

注意,标号exper与指令必须在同一代码段。

例子:adr r0, _start :将指定地址赋到r0中

.........

_start:
b _start

r0的值为 标号_start 与此指令的距离差 + PC值(当前指令位置)

ADRL:

这是一条中等范围的地址读取伪指令,它将基于PC的相对偏移的地址值读到目标寄存器中。

使用的格式:ADRL register,exper。

在编译源程序时,汇编器会用两条合适的指令来替换这条伪指令。

例如:

ADD register,PC,offset1

ADD register,register,offset2

与ADR相比,它能读取更大范围的地址。

注意,标号exper与指令必须在同一代码段。

接下来是LDR,首先要说的是有两个家伙,他们都叫LDR。

一个是LDR伪指令,一个是LDR指令,名字相同却不是一个东西。

区分的方法就是看第二个参数,如果有等号,就是伪指令。

LDR指令:

例子: ldr r0, 0x12345678 就是把0x12345678这个地址中的值存放到r0中。而mov不能干这个活,mov只能在寄存器之间移动数据,或者把立即数移动到寄存器中。

LDR伪指令:

例1(立即数): ldr r0, =0x12345678

这样,就把0x12345678这个地址写到r0中了。所以,ldr伪指令和mov是比较相似的。只不过mov指令限制了立即数的长度为8位,也就是不能超过512。而ldr伪指令没有这个限制。如果使用ldr伪指令时,后面跟的立即数没有超过8位,那么在实际汇编的时候该ldr伪指令是被转换为mov指令的。

例2(标号): ldr r0, =_start :将指定标号的值赋给r0

这里取得的是标号 _start 的绝对地址,这个绝对地址(运行地址)是在链接的时候确定的。它要占用 2 个 32bit的空间,一条是指令,另一条是文字池中存放_start 的绝对地址。


这里对比一下,adr r0, _start,和 ldr r0, =_start

它们的目的是一样的,想把标签的地址给r0,区别是一个是相对地址,一个是绝对地址。目的一样,但是得到的结果不一定相同。结果是否相同,就要看这个PC的值,是否和链接地址相同了。PC值,以及链接地址,








分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

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

  • ARM汇编中LDR伪指令和LDR指令

相关文章

  • 2017-05-26Android中通过反射获取资源Id,android获取资源id
  • 2017-05-26Android菜单项内容大全,android菜单项大全
  • 2017-05-26安卓开源项目周报0208,安卓开源项目0208
  • 2017-05-26Android--httpclient模拟post请求和get请求分析
  • 2017-05-26Android 自定义控件之第三讲:obtainStyledAttributes 系列函数详解
  • 2017-05-26我的android学习经历8,android学习经历8
  • 2017-05-26点击文本改变改行背景色,弹出对话框,改行背景
  • 2017-05-223.8 Gestures(手势)
  • 2017-05-26获取LayoutInflater对象的方法和inflate方法的一些参数问题,inflater.inflate参数
  • 2017-05-26算法导论--广度优先搜索和深度优先搜索,导论深度优先搜索

文章分类

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

最近更新的内容

    • 7.1.1 Android网络编程要学的东西与Http协议学习
    • 安卓开源项目周报0104,安卓开源项目0104
    • 4.5.2 Intent之复杂数据的传递
    • 关于eclipse android 在manifest改app应用包名注意事项,androidmanifest
    • 利用SurfaceView显示正弦曲线,仿造示波器,surfaceview正弦
    • 一次奇怪的MySQL复制故障
    • 菜单(Menu)的三中创建方式——Android开发之路2,menuandroid
    • Git安装与上传代码至Github,git上传github
    • Vs2017 无法调试APP,Vs2017调试APP
    • 匿名社交3--消息评论,匿名社交3--

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

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