博客
关于我
不能直接用加载伪指令加载的立即数浅谈ARM 汇编里的 literal pools文字池以及LTORG文字池放置指令
阅读量:152 次
发布时间:2019-02-27

本文共 689 字,大约阅读时间需要 2 分钟。

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)文字池的使用原则

       在大多数时候,使用文字池可以提高程序性能,不过在特定情况下,使用不使用文字池(亦即使用文字池

       的替代方案)才是最理想的。

转载地址:http://kspb.baihongyu.com/

你可能感兴趣的文章
Netflix:当你按下“播放”的时候发生了什么?
查看>>
Netflix推荐系统:从评分预测到消费者法则
查看>>
netframework 4.0内置处理JSON对象
查看>>
Netgear WN604 downloadFile.php 信息泄露漏洞复现(CVE-2024-6646)
查看>>
Netgear wndr3700v2 路由器刷OpenWrt打造全能服务器(十一)备份
查看>>
netlink2.6.32内核实现源码
查看>>
netmiko 自动判断设备类型python_Python netmiko模块的使用
查看>>
NetMizer 日志管理系统 多处前台RCE漏洞复现
查看>>
NetMizer-日志管理系统 dologin.php SQL注入漏洞复现(XVE-2024-37672)
查看>>
Netpas:不一样的SD-WAN+ 保障网络通讯品质
查看>>
netron工具简单使用
查看>>
NetScaler MPX Gateway Configuration
查看>>
NetScaler的常用配置
查看>>
netsh advfirewall
查看>>
NETSH WINSOCK RESET这条命令的含义和作用?
查看>>
netstat kill
查看>>
netstat命令用法详解
查看>>
Netstat端口占用情况
查看>>
Netty 4的内存管理:sun.misc.Unsafe
查看>>
Netty channelRegistered\ChannelActive---源码分析
查看>>