`
freesoftman
  • 浏览: 314445 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ARM汇编中LDR与LTORG的关系

阅读更多

看了arm汇编语言语法一个多月了。总算入门了。当然还有很多东西值得继续努力推敲滴。

 

最近对LDR与LTORG有了一些新的认识。

 

LDR是一个比较复制的指令。作用是从存储器到寄存器的单一数据读取指令。它有19条指令格式。

其中有两条格式为宏指令(macro),格式如下:

1,LDR<cond><type>Rd,<label>

2,LDR<cond>            Rd,=<32-bit-value>

 

这里重点分析下第二条宏指令。它会被编译器编译成一条指令,把给定的32位数值保存到寄存器Rd.通常这掉指令是LDR<cond>Rd,[pc,#<offset>],这个32位数保存在以地址(pc+<offset>开始的一个文字池(literal pool)中。

 

关于指令LDR<cond>Rd,[pc,#<offset>],大家就要复习一下arm汇编的"单寄存器load-store指令的寻址方式"了。这里使用到了它的前变址寻址方式。 pc的值不变,寻找的内存值为mem[pc+offset]。

 

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

使用说明:

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

 

示例代码:

AREA   Example ,CODE,READONLY;  //声明一个代码段,名称为Example,属性为只读

Start    BL  funcl

    ;code

funcl                                       //子程序

    ;code

    LDR  R1,=0x800               //将0X800加载到R1

    MOV  PC,lr                       //子程序结束

LTORG                                   //定义数据缓冲池

data   SPACE 4200               //从当前开始分配40字节的内存单元并初始化为0

END                                      //程序结束

 

0x800的值被编译器暂时放在了data[0-3]字段中。

分享到:
评论

相关推荐

    ARM汇编中ldr与adr的区别

    本文给大家介绍了ARM汇编中ldr与adr的区别。

    arm汇编ldr用法

    ADS的工程1.2,经过本人调试可用,

    ARM伪指令ADR与LDR的区别

    详细讲解对比了ARM汇编指令ADR和汇编指令LDR的区别

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

    arm是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令。比如想把数据从内存中某处读取到寄存器中,只能使用ldr

    常用ARM指令集及汇编.pdf

    Thumb 指令集与 ARM 指令集的区别 39 Thumb 存储器访问指令 40 LDR 和 STR 41 PUSH 和 POP 43 LDMIA 和 STMIA 43 Thumb 数据处理指令 45 数据传送指令46 MOV 46 MVN 46 NEG47 算术逻辑运算指令47 ...

    LDR.rar_LDR_arm ldr_ldr arm

    ARM LDR指令和LDR伪指令的总结,搞ARM的朋友建议看看!

    ARM汇编ADR,LDR等伪指令

    arm中LDR伪指令与LDR加载指令LDR伪指令的形式是“LDR Rn,=expr”。下面举一个例子来说明它的用法。 COUNT EQU 0x40003100 …… LDR R1,=COUNT MOV R0,#0 STR R0,[R1] COUNT是我们定义的一个变量,地址为0x...

    arm指令中mov和ldr有什么区别

    本文主要介绍了arm指令中mov和ldr有什么区别,希望对你的学习有所帮助。

    基于arm的汇编语言讲解

    详细讲解arm汇编的指令,方便容易查询,是个好材料 LDM * LDR * STM * STR * SWP

    ARM汇编指令的速查表、特点和格式

     ARM风格ARM汇编:指令一般用大写字母、Windows中的IDE开发环境(如ADS、MDK等)常用。如: LDR R0, [R1]  GNU风格ARM汇编:指令一般用小写字母、linux中常用。如:ldr r0, [r1]  0.3 ARM汇编指令的特点  ...

    ARM汇编手册--S3C2440开发板

    ARM汇编手册--S3C2440开发板中需要的汇编指令,mov,ldr等等保存为了使用方便

    arm9疑难问题小结

    对初学arm的时,一些疑难问题进行总结,ARM汇编% ldr和adr CPSR_cxsf ^的作用 MACRO-MEND

    ARM汇编语言

    1、熟练掌握常用指令LDR LDM STR STM ,条件符号的使用,影响标志位的操作,常用伪指令LDR DCD DCB 等的使用; 2、熟悉ADS1.2汇编的基本格式和调试方法,逐渐掌握排错技巧。 3、ADS1.2软件操作不明的同学查看“ADS...

    ARM指令详解及使用

    ARM指令详解!详细的介绍ARM 给指令的定义,使用规则!以及需要特别的注意事项!

    嵌入式系统/ARM技术中的ARM汇编常用伪操作总结

    在分析 2410 工程中启动代码的过程中,除了一些常用的汇编如 ldr,str,bic 等,还有一些很陌生的符号让我们很困惑,到网上一查资料,噢,原来是 ARM 的一些伪操作。为了在阅读启动代码的过程中不会出现很大的阅读与...

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

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

    ARM汇编常用伪操作总结

    在分析 2410 工程中启动代码的过程中,除了一些常用的汇编如 ldr,str,bic 等,还有一些很陌生的符号让我们很困惑,到网上一查资料,噢,原来是 ARM 的一些伪操作。为了在阅读启动代码的过程中不会出现很大的阅读与...

    arm在thumb指令下ldr和bl实例

    1.arm在thumb指令下ldr和bl实例 2.ads工程

    嵌入式开发之冒泡排序

    arm汇编之冒泡排序 嵌入式开发 AREA Sort,CODE,READONLY :首先用AREA伪代码加上CODE,表明下面引出的将是一个代码段(于此相对的还有数据段DATA),ENTRY 和END成对出现,说明他们之间的代码是程序的主体 ENTRY:...

    ARM指令大全(汇编语言)日记

    ARM指令集详解 ARM可以用两套指令集:ARM指令集和Thumb指令集。本文介绍ARM指令集。在介绍ARM指令集之前,先介绍指令的格式。 1 指令格式 (1)基本格式 &lt;opcode&gt;{&lt;cond&gt;}{S} ,&lt;Rn&gt;{,&lt;opcode2&gt;} 其中,内的项是...

Global site tag (gtag.js) - Google Analytics