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伪指令使用方法具体解释的更多相关文章
- 转 -- ARM 中 LDR伪指令
我们知道ARM CPU中有一条被广泛使用的指令LDR,它主要是用来从存储器(确切地说是地址空间)中装载数据到通用寄存器.但不论是ARMASM还是GNU ARM AS,都提供了一条与之同名的伪指令LDR ...
- ARM中LDR伪指令与LDR加载指令
ARM指令集中,LDR通常都是作加载指令的,但是它也可以作伪指令. LDR伪指令的形式是“LDR Rn,=expr”.下面举一个例子来说明它的用法. COUNT EQU 0x4000310 ...
- ARM汇编中ldr伪指令和ldr指令(转载)
转自:http://blog.csdn.net/ce123_zhouwei/article/details/7182756 ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成, ...
- ARM7ldr指令与ldr伪指令
ldr伪指令的第二个操作数之前有个=,意思是第一个操作书 = 第二个操作数,相当明了 核心就在于对于用.word指令在.text段里另外定义一段内存,用ldr r0,[pc + x(可以算出.text ...
- Js apply 方法 具体解释
Js apply方法具体解释 我在一開始看到javascript的函数apply和call时,很的模糊,看也看不懂,近期在网上看到一些文章对apply方法和call的一些演示样例,总算是看的有点眉目了 ...
- Format类及其子类功能和使用方法具体解释
Format类及其子类功能和使用方法具体解释 1. Format类结构: · java.lang.Object · java.text.Format · ...
- hbase-0.94安装方法具体解释
先决条件: 1)java环境,须要安装java1.6以上版本号 2)hadoop环境.因为HBase架构是基于其它文件存储系统的,因此在分布式模式下安装Hadoop是必须的,可是,假设 ...
- ZooKeeper安装方法具体解释
ZooKeeper安装方式分为两种,一种为单机模式.一个为集群模式,集群模式须要事先正确配置hadoop集群,安装方法參考hadoop-1.2.1安装方法具体解释 单机模式安装: 1.上传并解压zoo ...
- 模式识别 - libsvm的函数调用方法 具体解释
libsvm的函数调用方法 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26261173 须要载入(load)SVM的 ...
随机推荐
- web前端之 CSS引入第三方插件
引入第三方图标插件 - fontawesome 官网地址:http://fontawesome.io/ 1.下载图标插件包 下载地址:https://codeload.github.com/FortA ...
- java类加载器行为[笔记]
1. Java虚拟机使用第一个类的第一件事情就是将该类的字节码装进来,装载类字节码的功能是由类装器完成的,类半遮器负责根据一个类的名称来定位和生成类的字节码数据后返回给Java虚拟机. 2. 类装载器 ...
- LDA-线性判别分析(一)
本来是要调研 Latent Dirichlet Allocation 的那个 LDA 的, 没想到查到很多关于 Linear Discriminant Analysis 这个 LDA 的资料.初步看了 ...
- [Hapi.js] Up and running
hapi is a rock solid server framework for Node.js. Its focus on modularity and configuration-over-co ...
- ARM9嵌入式学习笔记(1)-Linux命令
ARM9嵌入式学习笔记(1)-Linux命令 实验1-1-2 Linux常见命令使用 添加用户useradd smb; 设置账户密码passwd smb; 切换用户su - root 关机命令shut ...
- Oracle中drop user和drop user cascade的区别
drop user : 仅仅是删除用户,drop user username cascade :会删除此用户名下的所有表和视图. userSpecify the user to be dropped. ...
- .net批量删除和添加
往页面上拖一个GridView,设置好数据源,并为GridView添加一个模板列,往模板列里添加一个chekcbox,比如下面的代码 <asp:GridView ID="GridVie ...
- C#/.NET笔试题
1.简述 private. protected. public. internal.protected internal 访问修饰符和访问权限 private : 私有成员, 在类的内部才可以访问. ...
- js的 new image()---转
创建一个Image对象:var a=new Image(); 定义Image对象的src: a.src=”xxx.gif”; 这样做就相当于给浏览器缓存了一张图片. 图像对象: 建立图像对象:图 ...
- Android HttpClient框架get和post方式提交数据(非原创)
1.fragment_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android& ...