`
javababy1
  • 浏览: 1174281 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

ARM汇编----伪指令LTORG

 
阅读更多

LTORG用于声明一个数据缓冲池,(也称为文字池)的开始。在使用伪指令LDR时,常常需要在适当的地方加入LTORG声明数据缓冲池,LDR加载的数据暂时放于数据缓冲池。

语法LTORG

使用说明:

当程序中使用LDR之类的指令时,数据缓冲池的使用可能越界。为防止越界发生,可使用LTONG伪操作定义数据缓冲池。通常大的代码段可以使用多个数据缓冲池。ARM汇编编译器一般把数据缓冲池放在代码段的最后面,即下一代码段开始之前,或者END伪操作之前。LTORG伪操作通常放在无条件跳转指令之后,或者子程序返回指令之后,这样处理器就不会错误的将数据缓冲池中的数据当作指令来执行。

LDR伪指令在汇编时,如果立即数可以用<shifter_operand>表示的话就替换为MOV或MVN指令;如果不能用其表示则需要将该立即数放到一个文字池中,并生成一条将该文字池内容加载到目标寄存器的LDR指令。而使用LDR指令必须保证文字池在其可以访问的地址范围之内,对于ARM指令集来说就是4KB,所以必须在LDR指令前后4KB的范围内用LTORG显式地在代码段中添加一个文字池。

LTORG是在此指令出现的地方放一个文本池(literal pool).在ARM汇编中常用到

ldr r0, =instruction将地址instruction载入r0.

此时编译器将ldr尽可能的转变成mov或mvn指令。

如果转变不成,将产生一个ldr指令,通过pc相对地址从一块保存常数的内存区读出instruction的值。此内存区既是文本池。一般的,文本池放在END指令之后的地方。但是,如果偏移地址大于4k空间, ldr指令会出错(因为ldr的相对偏移地址为12-bit的值).此时使用LTORG放到会出错的ldr指令附近,以解决此问题。编译器会收集没有分配的ldr的值放到此文本池中。

源文档 <http://blog.csdn.net/lemon_fantasy/article/details/2612860>

分享到:
评论

相关推荐

    常用ARM指令集及汇编.pdf

    ARM 伪指令34 ADR 35 ADRL35 LDR36 NOP37 Thumb 指令集39 Thumb 指令集与 ARM 指令集的区别 39 Thumb 存储器访问指令 40 LDR 和 STR 41 PUSH 和 POP 43 LDMIA 和 STMIA 43 Thumb 数据处理指令 45 ...

    arm指令集-中文 (ARM微控制器基础)

    ARM7TDMI(-S)指令集及汇编....................................................................................................................1 ARM 处理器寻址方式...........................................

    学习ARM汇编的经典参考资料

    学习ARM汇编指令的经典资料。 对ARM的各种汇编指令进行了深入全面的讲解,并给出了各种示例和详细注解,并且还对一些值得注意的点或是容易犯错误的地方进行了总结。 目录 前言......................................

    ARM指令集 肯定可以下载

    ARM7TDMI(-S)指令集及汇编....................................................................................................................1 ARM 处理器寻址方式...........................................

    ARM® Compiler v5.06 for µVision® armasm User Guide

    9.5 --arm_only 9.6 --bi 9.7 --bigend 9.8 --brief_diagnostics, --no_brief_diagnostics 9.9 --checkreglist 9.10 --compatible=name 9.11 --cpreproc 9.12 --cpreproc_opts=option[,option,…] 9.13 --cpu=list ...

    GNU ARM Assembler Quick Reference.pdf

    A summary of useful commands and expressions for the ARM architecture using the GNU assembler is presented briefly in the concluding portion of this Appendix. GNU Assembler Directives for ARM The ...

    stm32F407纯汇编跑马灯

    keil工程,stm32f407纯汇编点亮LED,不需要其他系统文件,超简单 ;===================================== ;函数名:MAIN 主函数 ;===================================== MAIN SUB_PROC SUB_BEGIN ;设置PA6 PA6_...

    uboott移植实验手册及技术文档

    @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0 fs2410_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t fs2410 NULL s3c24x0 arm: CPU的架构(ARCH) arm920t: CPU的类型(CPU),其...

    数据定义伪操作

    本文是关于 数据定义伪操作。

Global site tag (gtag.js) - Google Analytics