ALIGN 边界对齐指令
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 边界对齐指令相关推荐
- 整数边界对齐方式_c中结构体边界对齐(转)
c中结构体边界对齐(转) 2011-11-23 11:15:52| 分类: C&C++ | 标签: |字号大中小 C语言结构体对齐也是老生常谈的话题了.基本上是面试题的必考题.结构体到底怎 ...
- Boost:align overflow对齐溢出的测试程序
Boost:align overflow对齐溢出的测试程序 实现功能 C++实现代码 实现功能 align overflow对齐溢出的测试程序 C++实现代码 #include <boost/a ...
- 内存对齐指令详解(posix_memalign)
目录 posix_memalign opencv中的内存对齐函数源码 posix_memalign 预对齐内存的分配 在大多数情况下,编译器和C库透明地帮你处理对齐问题.POSIX 标明了通过mall ...
- c#编程指南(十二) 平台调用P-INVOKE完全掌握, 结构体边界对齐和内存布局
在使用结构体指针,进行C#和C++的互相调用.边界对齐是一个大问题,因为边界对齐问题,结构体的成员并不是顺序在内存一个挨着一个的排序. 而且在C++中可以使用#pragma pack(n)改变边界对齐 ...
- linux0.12内核---关于内存寻址与4k边界对齐
以4G大小的物理内存为例,其可以存储4G(4,294,967,296)个字节(每个字节8bit(位)),每个字节在内存中可以看做是按照数组样式向下排列,因此要想对所有字节进行寻址,那么就需要对每个字节 ...
- Linux sse 地址对齐指令,SSE指令:哪些CPU可以执行原子16B内存操作?
在<英特尔®64和IA-32架构开发人员手册>中.3A如今包含您提到的内存订购白皮书的规格,在第8.2.3.1节中说,正如您自己指出的那样, Intel-64内存排序模型可确保以下各项 内 ...
- align的对齐方式
http://www.360doc.com/content/13/0515/08/7245213_285516142.shtml 经常会看到arm-linux汇编中有如下的指令: .align n 它 ...
- 整数边界对齐方式_嵌入式基础——字节对齐
字节对齐 一.内存访问对齐规则 从高级语言的视角看,内存访问是是字节为单位的. 但是从CPU角度看,内存访问粒度与指令有关,比如1字节访问,2字节访问,4字节访问,8字节访问等. 如果在编程过程中不注 ...
- GCC的内存边界对齐
GCC有三种影响内存对齐的开关: 首先是命令行参数 –fpack_struct=n (n只可以是1,2,4,8等2的幂,而且要小于平台默认的对齐字节数,否则不会生效) 其次是#pragma pack( ...
最新文章
- Android4.3 屏蔽HOME按键返回桌面详解(源码环境下)
- 2021 年 JavaScript 大事记
- OpenShift 4 - 用KubeletConfig和ContainerRuntimeConfig分别修改集群节点的Kubelet和cri-o的配置
- vscode中vue代码高亮_Vue中添加友盟代码统计
- C#指南,重温基础,展望远方!(11)C#委托
- 禁用计算机服务,适当禁用系统服务 提升计算机运行速度
- 扇贝python多少钱_扇贝多少钱一斤?扇贝多少钱一斤2017?
- 研究生毕业论文查重标准是什么
- c#字符串的格式化输出
- Python总结-学习方向和方法
- Python 趣味百题
- 数据结构与算法学习笔记——图(Graph)
- 自学编程系列——3 面向对象编程
- [Gitlab CI/CD] fatal: could not read Username for ‘xxx‘: No such device or address
- 杭电ACM基础题(2075、2076、2078、2081、2083、2088、2090、2092、2093、2095)
- js基础练习题(3)
- PHP在mysql中的数据转义问题
- 送给未来的自己10句话
- Javascript手把手教你做商品放大镜效果
- Bing必应地图中国API-放大与平移
热门文章
- 国开现代汉语专题,形考答案形考任务
- 新朋实验室之玩具遥控车改装为ARDUINO蓝牙遥控小车(代码及制作过程开源)
- 如何启用计算机hdmi,解答电脑怎么使用HDMI连接电视
- 什么是csrf攻击如何避免,CSRF攻击与防御
- JavaScript数据类型有哪些
- 如何使用密码保护Linux桌面用户文件夹
- web前端入门学习 css(6)(定位position)(元素的显示与隐藏display、可见性visibility、溢出overflow)(案例:土豆播放页)
- 直销银行:城商行展开渠道反击
- windows查看mysql版本(三种方法)
- echarts 三环圆环_echarts多圆环饼图