看了arm汇编语言语法一个多月了。总算入门了。当然还有许多东西值得持续尽力琢磨滴。
最近对LDR与LTORG有了一些新的知道。
LDR是一个比较的指令。作用是从存储器到寄存器的单一数据读取指令。它有19条指令格局。
其中有两条格局为宏指令(macro),格局如下:
1,LDR
2,LDR
这儿要点剖析下第二条宏指令。它会被编译器编译成一条指令,把给定的32位数值保存到寄存器Rd.一般这掉指令是LDR
关于指令LDR
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]字段中。