看了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 汇编语言编程实验报告 一、实验目的: 掌握 ADT IDE ARM 开发环境中基本的工程设置以及程序编译方法。 掌握 ADT IDE ARM 开发环境中基本的程序调试方法。 掌握基本的 ARM 汇编语言编程方法。 二、实验内容: ...
以上是对ARM79汇编语言中的一些关键伪指令的详细介绍,这些伪指令对于理解和编写高效的汇编程序非常重要。通过掌握这些伪指令的使用方法,开发者可以更高效地管理和组织代码,提高程序的性能和可维护性。
ARM程序示例参考.pdf是一个关于ARM架构编程的文档,其中...这些示例展示了ARM汇编语言的基本结构和常见指令的用法,以及如何在程序中处理立即数和调用子程序。理解这些概念对于编写和调试ARM架构上的低级程序至关重要。
此外,ARM汇编语言中还有特定的操作码,如: - **NOP**:空操作指令,通常用于填充或占位。 - **LDR**:加载寄存器,可以从内存中加载数据到指定的寄存器。 - **ADR**:地址计算,生成相对当前PC的偏移地址。 - **...
ARM GNU 汇编语言是用于编写ARM架构嵌入式系统的编程语言,它结合了标准的ARM汇编指令和一些特定的GNU扩展伪指令。这些伪指令提供了额外的便利功能,使得程序开发更加灵活和高效。以下是ARM GNU汇编伪指令的一些关键...
学习ARM汇编指令的经典资料。 对ARM的各种汇编指令进行了深入全面的讲解,并给出了各种示例和详细注解,并且还对一些值得注意的点或是容易犯错误的地方进行了总结。 目录 前言......................................
本文将详细介绍ARM汇编语言中的几种常用伪指令,包括程序装载指令(ADR、ADRL、LDR)、空操作(NOP)、符号定义、数据定义以及汇编控制等伪操作。 #### 二、程序装载指令 ##### 1. ADR(小范围程序装载指令) ADR...
`LTORG`是与`LDR`配合使用的,它指示编译器在当前位置放置literal pool。这样可以减少相对PC的偏移,提高代码的执行效率。如果没有使用`LTORG`,编译器会在程序末尾自动创建literal pool,但可能导致较大的偏移,...
汇编语言中的标号用于标识指令或数据的位置,LDR和ADR指令用于加载常量或地址到寄存器,.ltorg伪操作创建文字池,ld命令行的-Ttext org参数设置输出文件的text段起始地址。 在实验过程中,使用Embest S3CEV40实验板...
本文将深入解析一个基于ARM架构的汇编语言程序,该程序的功能是“从源地址拷贝num个字(num*4字节)的数据到目的地址dst中”,旨在展示ARM汇编语言的基本操作和数据传输机制。 ### 核心知识点 #### 1. ARM汇编语言...
此外,还有一些ARM汇编的特殊符号和操作码: 1. `@`, `#`, `;`:用于注释,分别表示行内注释、整行注释和新行注释。 2. `NOP`:空操作指令,通常用于占位或等待时钟周期。 3. `LDR`:加载寄存器指令,从内存中...
ARM7TDMI(-S)指令集及汇编....................................................................................................................1 ARM 处理器寻址方式...........................................
其调用与 CFG_NAND_LEGACY 宏有 关,如果没有定义这个宏,系统调用 drivers/nand/nand.c 中的 nand_init();否则调用自己在 本文件中的 nand_init()函数,本例使用后者。fs2410.c代码如下: #if defined(CONFIG_CMD...