ALIGN 指令通过用零或 NOP 指令进行填充将当前位置对齐到指定边界。

语法

ALIGN {expr{,offset{,pad{,padsize}}}}

其中:

expr

是一个数值表达式,取值为 2 到 231 范围内的 2 的任何次幂

offset

可以是任何数值表达式

pad

可以是任何数值表达式

padsize

可为 1、2 或 4。

操作

使当前位置对齐到如下形式的下一地址:

offset + n * expr

如果未指定 expr,则 ALIGN 会将当前位置设置到下一个字(四字节)边界处。前一个位置和当前新位置之间的未用空间用以下内容填充:

  • 如果指定了 pad,则用 pad 的副本填充

  • 满足以下所有条件时,用 NOP 指令填充:

    • 未指定 pad

    • ARM 或 Thumb 指令后面是 ALIGN 指令

    • 在当前节中,AREA 指令设置了 CODEALIGN 属性

  • 其他情况用零填充。

根据 padsize 值的情况,pad 将被分别视为一个字节、半字或字。如果未指定 padsize,则 pad 在数据节中缺省为字节,在 Thumb 代码中缺省为半字,在 ARM 代码中缺省为字。

用法

使用 ALIGN 可确保数据和代码对齐到适当的边界上。在下列情况下,这通常是必须的:

  • ADR Thumb 伪指令只能加载字对齐的地址,但 Thumb 代码内的标签可能不是字对齐的。使用 ALIGN 4 可确保 Thumb 代码内的地址是四字节对齐的。

  • 使用 ALIGN 可利用有些 ARM 处理器上的高速缓存。例如,ARM940T 带有一个含 16 字节行的高速缓存。 使用 ALIGN 16 可在 16 字节边界上对齐函数入口点,并使高速缓存的效率最高。

  • LDRD 和 STRD 双字数据传送必须是八字节对齐的。如果要用 LDRD 或 STRD 访问数据,则应在内存分配指令(如 DCQ)之前使用 ALIGN 8(请参阅数据定义指令)。

  • 只有标签的行可以是任意对齐的。 随后的 ARM 代码是字对齐的(Thumb 代码是半字对齐的)。因此标签不能正确寻址代码。在标签前使用 ALIGN 4(或对 Thumb 代码使用 ALIGN 2)。

对齐相对于例程所在的 ELF 节的起始位置。 节必须对齐到相同的或更近似的边界上。 AREA 指令中的 ALIGN 属性以不同方式指定(请参阅AREA 和示例)。

转载:http://my.oschina.net/fzliu/blog/32830

ALIGN 边界对齐指令相关推荐

  1. 整数边界对齐方式_c中结构体边界对齐(转)

    c中结构体边界对齐(转) 2011-11-23 11:15:52|  分类: C&C++ |  标签: |字号大中小 C语言结构体对齐也是老生常谈的话题了.基本上是面试题的必考题.结构体到底怎 ...

  2. Boost:align overflow对齐溢出的测试程序

    Boost:align overflow对齐溢出的测试程序 实现功能 C++实现代码 实现功能 align overflow对齐溢出的测试程序 C++实现代码 #include <boost/a ...

  3. 内存对齐指令详解(posix_memalign)

    目录 posix_memalign opencv中的内存对齐函数源码 posix_memalign 预对齐内存的分配 在大多数情况下,编译器和C库透明地帮你处理对齐问题.POSIX 标明了通过mall ...

  4. c#编程指南(十二) 平台调用P-INVOKE完全掌握, 结构体边界对齐和内存布局

    在使用结构体指针,进行C#和C++的互相调用.边界对齐是一个大问题,因为边界对齐问题,结构体的成员并不是顺序在内存一个挨着一个的排序. 而且在C++中可以使用#pragma pack(n)改变边界对齐 ...

  5. linux0.12内核---关于内存寻址与4k边界对齐

    以4G大小的物理内存为例,其可以存储4G(4,294,967,296)个字节(每个字节8bit(位)),每个字节在内存中可以看做是按照数组样式向下排列,因此要想对所有字节进行寻址,那么就需要对每个字节 ...

  6. Linux sse 地址对齐指令,SSE指令:哪些CPU可以执行原子16B内存操作?

    在<英特尔®64和IA-32架构开发人员手册>中.3A如今包含您提到的内存订购白皮书的规格,在第8.2.3.1节中说,正如您自己指出的那样, Intel-64内存排序模型可确保以下各项 内 ...

  7. align的对齐方式

    http://www.360doc.com/content/13/0515/08/7245213_285516142.shtml 经常会看到arm-linux汇编中有如下的指令: .align n 它 ...

  8. 整数边界对齐方式_嵌入式基础——字节对齐

    字节对齐 一.内存访问对齐规则 从高级语言的视角看,内存访问是是字节为单位的. 但是从CPU角度看,内存访问粒度与指令有关,比如1字节访问,2字节访问,4字节访问,8字节访问等. 如果在编程过程中不注 ...

  9. GCC的内存边界对齐

    GCC有三种影响内存对齐的开关: 首先是命令行参数 –fpack_struct=n (n只可以是1,2,4,8等2的幂,而且要小于平台默认的对齐字节数,否则不会生效) 其次是#pragma pack( ...

最新文章

  1. Android4.3 屏蔽HOME按键返回桌面详解(源码环境下)
  2. 2021 年 JavaScript 大事记
  3. OpenShift 4 - 用KubeletConfig和ContainerRuntimeConfig分别修改集群节点的Kubelet和cri-o的配置
  4. vscode中vue代码高亮_Vue中添加友盟代码统计
  5. C#指南,重温基础,展望远方!(11)C#委托
  6. 禁用计算机服务,适当禁用系统服务 提升计算机运行速度
  7. 扇贝python多少钱_扇贝多少钱一斤?扇贝多少钱一斤2017?
  8. 研究生毕业论文查重标准是什么
  9. c#字符串的格式化输出
  10. Python总结-学习方向和方法
  11. Python 趣味百题
  12. 数据结构与算法学习笔记——图(Graph)
  13. 自学编程系列——3 面向对象编程
  14. [Gitlab CI/CD] fatal: could not read Username for ‘xxx‘: No such device or address
  15. 杭电ACM基础题(2075、2076、2078、2081、2083、2088、2090、2092、2093、2095)
  16. js基础练习题(3)
  17. PHP在mysql中的数据转义问题
  18. 送给未来的自己10句话
  19. Javascript手把手教你做商品放大镜效果
  20. Bing必应地图中国API-放大与平移

热门文章

  1. 国开现代汉语专题,形考答案形考任务
  2. 新朋实验室之玩具遥控车改装为ARDUINO蓝牙遥控小车(代码及制作过程开源)
  3. 如何启用计算机hdmi,解答电脑怎么使用HDMI连接电视
  4. 什么是csrf攻击如何避免,CSRF攻击与防御
  5. JavaScript数据类型有哪些
  6. 如何使用密码保护Linux桌面用户文件夹
  7. web前端入门学习 css(6)(定位position)(元素的显示与隐藏display、可见性visibility、溢出overflow)(案例:土豆播放页)
  8. 直销银行:城商行展开渠道反击
  9. windows查看mysql版本(三种方法)
  10. echarts 三环圆环_echarts多圆环饼图