.align 指令有啥作用?

Posted

技术标签:

【中文标题】.align 指令有啥作用?【英文标题】:What does the .align directive do?.align 指令有什么作用? 【发布时间】:2013-01-27 05:07:54 【问题描述】:

我正在学习 x86,并试图弄清楚 .align 指令的作用以及它的用途。

Oracle Reference Manual 说:

.align 指令使生成的下一个数据对齐 模整数字节。整数必须是正整数表达式 并且必须是 2 的幂。如果指定,pad 是一个整数字节值 用于填充。文本部分的 pad 的默认值是 0x90(无);对于其他部分,pad 的默认值为零 (0)。

但我不确定这意味着什么。您是否可以参考我可以在哪里阅读更多相关信息或通过示例对其进行简要说明?

【问题讨论】:

【参考方案1】:

理解它的作用的关键是理解它为什么存在。

所有计算机都有一个称为wordsize的自然边界。此边界通常为 4 字节或 8 字节。

如果 4 和 8 字节值位于这些边界上,CPU 可以更快地从内存加载和存储,并且不会浪费缓存空间。某些类型的 CPU 根本无法获取未对齐的值。

因此,汇编器中必须有一种机制可以跳到下一个边界,以便标签和存储分配指令可以从更有效的地址开始。

对于指令,奇数边界适用于大多数计算机,但它们仍然会影响性能并浪费缓存空间。

   .string "ab\0"
; this next address is 3

    .string "ab\0"
    .align 4 # sometimes interpreted as 2**n, so, .align 2
; this next address is 4, and would still be 4 if the string was just "a"

【讨论】:

以上是关于.align 指令有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章

使用内联 PTX asm() 指令时,'volatile' 有啥作用?

CPU支持SSE3有啥作用?对游戏有好处吗?

fiddler断点测试修改响应指令有啥作用

opengl中 先用glFlush();然后glutSwapBuffers();有啥作用啊

在linux里面 在解压指令里面 tar xvzf /*解压的内容*/ -C / 这里面的C是啥意思,有啥作用。

Android 逆向x86 汇编 ( align | db | dw | dd | nop | 伪指令 )