码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-01-28 00:05:29      阅读:308      评论:0      收藏:0      [点我收藏+]

标签:常量   替代   寄存器   article   net   section   pool   nbsp   alt   

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(文字池)

标签:常量   替代   寄存器   article   net   section   pool   nbsp   alt   

原文地址:https://www.cnblogs.com/yulinhanhonor/p/8367534.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!