浅谈ARM 汇编里的 literal pools(文字池)

Posted yulinhanhonor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈ARM 汇编里的 literal pools(文字池)相关的知识,希望对你有一定的参考价值。

From: http://blog.csdn.net/asmarm/article/details/25792701

1)ARM汇编中 literal pool (文字池)本质是什么

      中文说明:     

               literal pool的本质就是ARM汇编语言代码节中的一块用来存放常量数据而非可执行代码的内存块。

       英文说明:

              Literal pools are areas of constant data in a code section。

            (出自ARM官方文档《ARM Compiler  armcc User Guide》)

2) 使用literal pool (文字池)的原因

       当想要在一条指令中使用一个 4字节长度的常量数据(这个数据可以是内存地址,也可以是数字常量)的时候,由于ARM指令集是定长的(ARM指令4字节或Thumb指令2字节),所以就无法把这个4字节的常量数据编码在一条编译后的指令中。此时,ARM编译器(编译C源程序)/汇编器(编译汇编程序) 就会在代码节中分配一块内存,并把这个4字节的数据常量保存于此,之后,再使用一条指令把这个4 字节的数字常量加载到寄存器中参与运算。

       在C源代码中,文字池的分配是由编译器在编译时自行安排的,在进行汇编程序设计时,开发者可以自己进行文字池的分配,如果开发者没有进行文字池的安排,那么汇编器就会代劳。

3)实际例子:

       图1是在编译一个C函数时,编译器自动进行文字池分配的具体例子。

技术分享图片   

图1

   4)文字池的替代方案

          文字池不是必须的,图2就是使用MOVW和MOVT取代文字池的使用的具体示例。

   技术分享图片

图2

5)文字池的使用原则

       在大多数时候,使用文字池可以提高程序性能,不过在特定情况下,不使用文字池(亦即使用文字池 的替代方案)才是最理想的。

以上是关于浅谈ARM 汇编里的 literal pools(文字池)的主要内容,如果未能解决你的问题,请参考以下文章

豹哥嵌入式讲堂:ARM Cortex-M开发之文件详解- 反汇编文件(.s/.lst/.dump)

浅谈Pool对象

博文连载ARM编译器ARM汇编与ARM GNU汇编

浅谈裸机开发的重要性

SharePoint - 浅谈Application Pool

ARM汇编基础