ARM LDR伪指令用法详解

LDR伪指令

10.45 LDR pseudo-instruction

  功能:把一个32位立即数或一个32位的内存地址加载到一个寄存器中。

注意:这里描述的是LDR伪指令,而不是LDR指令

  语法:

              LDR{cond}{.W} Rt, =expr

LDR{cond}{.W} Rt, =label_expr

*  
cond是一个可选的条件码

.W是可选的指令宽度说明符

*  
Rt是要加载的寄存器

*   expr是一个数字表达式

*   label_expr是一个以标号加上或减去一个数字值形式出现的PC相对或外部地址表达式

           举例:

            用法:

当使用LDR伪指令时:

*  如果表达式expr的值能用一个MOV或MVN指令进行加载,那么汇编器就使用MOV或MVN指令。

*  如果不能使用MOV或MVN指令,或者使用了label_expr,汇编器就把这个常量放在文字池里,

然后使用一条PC相对形式的LDR指令从文字池里读取这个常量。

  注意:

--- 以这种方式加载的内存地址,其值是在链接时确定的,所以这里的代码不是位置独立的。

--- 不管链接器把包含LDR指令的节放在哪里,指向常量的地址仍然是有效的。

汇编器把label_expr的值放到一个文字池里,然后使用一条PC相对形式的LDR指令把这个值

从文 字池里读取到寄存器里。

如果label_expr是一个外部表达式,或不在当前节中,汇编器就在目标文件中放置一个重定位

指示符。链接器在链接时会产生具体的地址。

如果label_expr是一个局部的命名的(named)或数字标号,那么汇编器在目标文件中放置

一个 重定位指示符,同时为这个局部标号产生一个符号名。具体的地址也是在链接时产生的。如果

这个局部标号引用的是Thumb代码,则内存地址的Thumb位(bit 0)就会被设置。

从PC到内存池中常量值之间偏移量在ARM及32位Thumb编码中必须在 ±4K字节内,在16位Thumb

编码中必须在0到+1K字节范围 内。你必须自己确保在上述有效范围内有一个内存池。

如果被引用的标号是在Thumb代码中,那么LDR伪指令设置label_expr所代表的内存地址的

Thumb位(bit 0)。

注意:

            在RealView Compilation Tools(RVCT) v2.2中,内存地址的Thumb位不会被设置。如果你有

依赖于这种行为的代码,请使用命令行选项--untyped_local_labels,强制汇编器不要设置被

引用的位于Thumb代码中的标号。

Thumb代码中的LDR伪指令

LDR in Thumb code

          你可以使用指令宽度说明符 .W 强制汇编器在ARMv6T2及以上的处理器上把Thumb代码中LDR

伪指令编码为32位长。即使立即数的值能使用一个16位的MOV指令加载,或存在一个在16位PC相

对LDR指令范围内的内存池,LDR.W总是产生一条32位的指令。

      未完待续。。。

ARM LDR伪指令用法详解

时间: 2024-11-06 03:16:21

ARM LDR伪指令用法详解的相关文章

hibenate中genarator的用法详解

ARM IDE 使用 ADS(ARM Developer Suite),是在1993年由Metrowerks公司开发是ARM处理器下最主要的开发工具. 新建工程:exp-2 新建文件exp-2.s到工程exp-2中: 创建好后,编辑源代码. 调试设置:AXD->options->configure Target..,选armul: ARMlinker中设置 RO Base与RW Base与Image Entry Point: 开始调试.add r1,r1,r2 // 将r1+r2的结果存储到r

js的offsetParent属性用法详解

js的offsetParent属性用法详解:此属性是javascript中较为常用的属性,对于它的良好掌握也是非常有必要的,下面就通过代码实例介绍一下它的用法,希望能够给需要的朋友带来一定的帮助.一.基本介绍:此属性可以返回距离指定元素最近的采用定位(position属性值为fixed.relative或者absolute)父级元素,如果父级元素中没有采用定位的元素,则返回body对象的引用.语法结构: obj.offsetParent 二.代码实例: <!DOCTYPE html> <

python处理word文件:win32com用法详解

目标:用python处理doc文件 方法:引入win32com模块 ************************************************************************** 一.安装 ************************************************************************** 首先要先下载安装win32com模块(起先在linux下装不成功,后在windows下面成功了...) 下载地址:http

jQuery 事件用法详解

jQuery 事件用法详解 目录 简介 实现原理 事件操作 绑定事件 解除事件 触发事件 事件委托 事件操作进阶 阻止默认事件 阻止事件传播 阻止事件向后执行 命名空间 自定义事件 事件队列 jquery中文文档 简介 jquery 之所以成为最受欢迎的前端库,很大一部分是得益于它的事件具有良好的语义,优秀的兼容性,并且便于管理和扩展. 在这里我会介绍 jquery 事件的一些比较基础的用法. 实现原理 jquery 事件脱胎于浏览器的 addEventListener (W3) 和 attac

(转)ProgressDialog用法详解

转载自: ProgressDialog用法详解 ProgressDialog的基本用法 ProgressDialog为进度对话框.android手机自带的对话框显得比较单一,我们可以通过ProgressDialog来自己定义对话框中将要显示出什么东西. 首先看看progressDialog里面的方法 setProgressStyle:设置进度条风格,风格为圆形,旋转的.  setTitlt:设置标题  setMessage:设置提示信息:  setIcon:设置标题图标:  setIndeter

BigDecimal用法详解(转)

BigDecimal用法详解    http://www.cnblogs.com/linjiqin/p/3413894.html 一.简介Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数.在实际应用中,需要对更大或者更小的数进行运算和处理.float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal.BigDecimal所创建的是对象

mapminmax的用法详解 _MATLAB

============外一篇 有关mapminmax的用法详解 by faruto==================================转自:http://www.ilovematlab.cn/thread-47224-1-1.html几个要说明的函数接口:[Y,PS] = mapminmax(X)[Y,PS] = mapminmax(X,FP)Y = mapminmax('apply',X,PS)X = mapminmax('reverse',Y,PS) 用实例来讲解,测试数据

Nmap用法详解

nmap是一个网络探测和安全扫描程序,系统管理者和个人可以使用这个软件扫描大型的网络,获取那台主机正在运行以及提供什么服务等信息.nmap支持很多扫描技术,例如:UDP.TCP connect().TCP SYN(半开扫描).ftp代理(bounce攻击).反向标志.ICMP.FIN.ACK扫描.圣诞树(Xmas Tree).SYN扫描和null扫描.从扫描类型一节可以得到细节.nmap还提供了一些高级的特征,例如:通过TCP/IP协议栈特征探测操作系统类型,秘密扫描,动态延时和重传计算,并行扫

CSS中伪类及伪元素用法详解

原文:CSS中伪类及伪元素用法详解 伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的读者可以自己尝试: :active  大致效果为用鼠标点击时,元素增加特效,鼠标松开时,特效消失.多用在按钮的点击上. 写法: 这里id为box的是一div块,在css中首先设置了他的基本样式,下面为加入:active伪类后需要修改的样式. 未点击时: 点击之后: :active.:hover.: