ARM汇编中LDR与LTORG的关系

发布者:安静的夜晚最新更新时间:2019-12-23 来源: eefocus关键字:ARM  汇编  LDR  LTORG 手机看文章 扫描二维码
随时随地手机看文章

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

 

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

 

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


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


1,LDRRd,

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

 

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

 

关于指令LDRRd,[pc,#],大家就要复习一下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  LTORG 引用地址:ARM汇编中LDR与LTORG的关系

上一篇:浅析ARM公司在物联网领域的战略布局
下一篇:ARM中的程序状态寄存器(CPSR)

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved