您的位置 首页 资料

ARM汇编中LDR与LTORG的联系

看了arm汇编语言语法一个多月了。总算入门了。当然还有很多东西值得继续努力推敲滴。最近对LDR与LTORG有了一些新的认识。LDR是一个比较的指…

看了arm汇编语言语法一个多月了。总算入门了。当然还有许多东西值得持续尽力琢磨滴。

最近对LDRLTORG有了一些新的知道。

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]字段中。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/264077.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部