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)文字池的运用准则
在大多数时分,运用文字池能够进步程序功能,不过在特定情况下,运用不运用文字池(亦即运用文字池
的代替计划)才是最理想的。