Literal pools(文字池)(ARM 汇编)
来源:互联网 发布:c语言代码翻译成中文 编辑:程序博客网 时间:2024/06/05 23:54
4.7 Literal pools
--ARM® Compiler Version 5.04 armasm User Guide
汇编器在代码节中使用文字池来存放一些常量数据 。你可以使用指示符LTORG来确保文字池位于
有效的范围内。
汇编器默认把文字池放在每一个代码节的末尾处。代码节的末尾的确定或者是由汇编源文件尾部的
指示符END确 定,或者由相邻代码节的起始行上指示符AREA确定。被汇编源文件包含的文件的尾部指
示符END不能标志一个 节的 结束。
默认情况下,文字池位于代码节的尾部。在大的代码节中,默认文字池与代码节中一条或多条LDR
伪指令的 距离 可能超出LDR伪指令操作数的寻址范围。从PC到文字池中的常量数据的偏移必须是:
* 当伪指令是32位时,在ARM或Thumb代码中,必须小于4K字节,常量数据的位置可以是在伪指令
的前面,也可以 是在伪指令的后面i。
* 当伪指令是16位Thumb指令时,必须小于1K字节,且文字池必须位于伪指令的后面。
当一条形如:LDR Rd, =const 伪指令需要一个文字池来存放立即数常量时,汇编器:
* 检查已经存在于该伪指令前面的文字池中是否有相同的常量且其偏移量是否在伪指令的允许寻址
范围内。如果条件满足,汇编器引用这个满足条件的常量。
* 否则,汇编器尝试把该常量值放到下一个文字池中。
如果下一个文字池超出伪指令的寻址范围,汇编器会产生一条错误信息。在这种情况下,你必须显
示地使用指示符LTORG来在代码节中放置一个附加的文字池。把指示符LTORG放在导致错误的伪指令后
面,并且位于伪指令LDR的有 效寻址范围内。
你必须把文字池放在代码节中处理器不会试图把它当作指令去执行的地方。建议放在无条件跳转指令
后或子程序的返回指令后。下面的一段ARM汇编代码是由汇编器生成的,可以清楚地表明上述规定是如何
工作的:
图1: 文字池的放置
- Literal pools(文字池)(ARM 汇编)
- 浅谈ARM 汇编里的 literal pools(文字池)
- 初识文字池(literal pools)
- arm汇编中的literal pools .
- ARM汇编(一)
- ARM Boot 示例(汇编)
- ARM 汇编指令(3)
- ARM 汇编指令(2)
- ARM 汇编指令(4)
- ARM汇编二三事(不断更新......)
- arm汇编基础(转)
- arm汇编基础(转)
- ARM汇编学习(1)
- 谈谈C99的新特征:复合文字(compound literal)和伸缩型数组
- GCC 内联汇编(GCC内嵌ARM汇编规则)
- (三)ARM 常用汇编指令(3)之内嵌汇编
- 交叉编译生成ARM汇编和反汇编二进制文件生成ARM汇编(指定ARM架构及cpu类型)
- 滚动文字代码(全)【汇编】
- VC实现具有回车移动焦点功能的编辑框
- LeetCode 151. Reverse Words in a String
- linux下安装apache详解
- LeetCode刷题笔录Convert Sorted Array to Balanced Binary Search Tree
- timersession
- Literal pools(文字池)(ARM 汇编)
- 坚持到底,敢于玩命
- 5.28 1h
- LeetCode 150. Evaluate Reverse Polish Notation
- eclipse android sdk 无法更新解决办法
- iOS的数据保存-NSUserDefaults
- Android 作品
- GIT 提交错误 fatal: LF would be replaced by CRLF
- android 动画api