`
freesoftman
  • 浏览: 319746 次
  • 性别: 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汇编程序设计

    ARM伪指令是在ARM汇编语言中使用的特殊指令,它们不是真正的机器指令,而是由汇编器解释并转换成相应的机器代码或进行其他处理。 #### 三、ARM汇编语言格式 ARM汇编语言有其特定的语法格式,包括但不限于指令格式...

    实验二ARM汇编语言编程实验..pdf

    ARM 汇编语言编程实验报告 一、实验目的: 掌握 ADT IDE ARM 开发环境中基本的工程设置以及程序编译方法。 掌握 ADT IDE ARM 开发环境中基本的程序调试方法。 掌握基本的 ARM 汇编语言编程方法。 二、实验内容: ...

    arm79汇编伪指令介绍

    以上是对ARM79汇编语言中的一些关键伪指令的详细介绍,这些伪指令对于理解和编写高效的汇编程序非常重要。通过掌握这些伪指令的使用方法,开发者可以更高效地管理和组织代码,提高程序的性能和可维护性。

    ARM程序示例参考.pdf

    ARM程序示例参考.pdf是一个关于ARM架构编程的文档,其中...这些示例展示了ARM汇编语言的基本结构和常见指令的用法,以及如何在程序中处理立即数和调用子程序。理解这些概念对于编写和调试ARM架构上的低级程序至关重要。

    ARMGNU汇编伪指令简介,编译器和开发工具,用GNU工具开发基于ARM的嵌入式系统[借鉴].pdf

    此外,ARM汇编语言中还有特定的操作码,如: - **NOP**:空操作指令,通常用于填充或占位。 - **LDR**:加载寄存器,可以从内存中加载数据到指定的寄存器。 - **ADR**:地址计算,生成相对当前PC的偏移地址。 - **...

    ARM GNU 汇编伪指令简介,编译器和开发工具,用GNU工具开发基于ARM的嵌入式系统.docx

    ARM GNU 汇编语言是用于编写ARM架构嵌入式系统的编程语言,它结合了标准的ARM汇编指令和一些特定的GNU扩展伪指令。这些伪指令提供了额外的便利功能,使得程序开发更加灵活和高效。以下是ARM GNU汇编伪指令的一些关键...

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

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

    ARM常用伪指令--个人整理的很全面

    本文将详细介绍ARM汇编语言中的几种常用伪指令,包括程序装载指令(ADR、ADRL、LDR)、空操作(NOP)、符号定义、数据定义以及汇编控制等伪操作。 #### 二、程序装载指令 ##### 1. ADR(小范围程序装载指令) ADR...

    ARM几条汇编指令的比较

    `LTORG`是与`LDR`配合使用的,它指示编译器在当前位置放置literal pool。这样可以减少相对PC的偏移,提高代码的执行效率。如果没有使用`LTORG`,编译器会在程序末尾自动创建literal pool,但可能导致较大的偏移,...

    嵌入式技术及应用ARM处理器工作模式实验

    汇编语言中的标号用于标识指令或数据的位置,LDR和ADR指令用于加载常量或地址到寄存器,.ltorg伪操作创建文字池,ld命令行的-Ttext org参数设置输出文件的text段起始地址。 在实验过程中,使用Embest S3CEV40实验板...

    从源地址拷贝num个字(num*4字节)的数据到目的地址dst中

    本文将深入解析一个基于ARM架构的汇编语言程序,该程序的功能是“从源地址拷贝num个字(num*4字节)的数据到目的地址dst中”,旨在展示ARM汇编语言的基本操作和数据传输机制。 ### 核心知识点 #### 1. ARM汇编语言...

    GNU汇编伪指令简介[文].pdf

    此外,还有一些ARM汇编的特殊符号和操作码: 1. `@`, `#`, `;`:用于注释,分别表示行内注释、整行注释和新行注释。 2. `NOP`:空操作指令,通常用于占位或等待时钟周期。 3. `LDR`:加载寄存器指令,从内存中...

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

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

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

    其调用与 CFG_NAND_LEGACY 宏有 关,如果没有定义这个宏,系统调用 drivers/nand/nand.c 中的 nand_init();否则调用自己在 本文件中的 nand_init()函数,本例使用后者。fs2410.c代码如下: #if defined(CONFIG_CMD...

Global site tag (gtag.js) - Google Analytics