ALIGN 边界对齐指令
2011-09-30 22:41
351 查看
ALIGN指令通过用零或
NOP指令进行填充将当前位置对齐到指定边界。
语法
ALIGN{
expr{,
offset{,pad{,
padsize}}}}[/code]
其中:
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可确保数据和代码对齐到适当的边界上。在下列情况下,这通常是必须的:
ADRThumb 伪指令只能加载字对齐的地址,但 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 和示例)。
相关文章推荐
- ALIGN 边界对齐指令
- 10.1.1 结构中域的对齐(ALIGN伪指令)
- CSS中,display属性、行高属性line-height以及垂直对齐方式vertical-align属性详细探讨
- android:layout_alignXXX (Layout中)与xxx XXX对齐
- align&&balignl代码对齐测试
- 边界对齐问题
- flex align-content中的描述的“多根轴线的对齐方式”中的“多根轴线”到底是什么
- 字节对齐和边界对齐介绍
- 初探Eigen(error C2719: “Qcw”: 具有 __declspec(align('16')) 的形参将不被对齐)
- Linux socket.h 中 CMSG_ALIGN 宏定义的作用(字节对齐)
- html基础 水平线<hr> 对齐方式align 粗细size 长度width 去阴影noshade
- 设置banner条 文字右边对齐(text-align)_文字颜色(color)_100%整个宽度(width+absolute)
- x264的堆栈对齐 x264_stack_align
- 垂直对齐:vertical-align属性(转)
- CSS教程:水平对齐(text-align)
- C 结构体边界对齐规则
- Qt 按钮菜单如何与按钮右边界对齐,并去掉下拉箭头
- 为什么要内存对齐?字节对齐和边界对齐介绍。
- 边界对齐问题