【问题标题】:Is there any effect to an align directive immediately following another?紧跟在另一个之后的 align 指令有什么影响吗?
【发布时间】:2014-03-18 20:09:41
【问题描述】:

它是如何工作的?最后一个align 是否覆盖了前一个的行​​为,使其效果为空,或者它在一起使用时会做些什么?我从一个大型汇编源代码中找到了这个,我问这个是因为我不认为这只是一个错字。

align 64
align 4

【问题讨论】:

  • 如果你在另一个方向上做,那么是的,这很重要,但按这个顺序不,因为根据定义,对齐 64 也是对齐 4
  • 可能有人稍后会添加更多对齐,但至少保留align 4,以便他们可以注释掉align 64?

标签: assembly nasm memory-alignment


【解决方案1】:

align 插入 NOP 以使当前节偏移量为指定值的倍数。 (您还可以显式指定要插入的 NOP 以外的值,例如 NULL 填充)。它还隐式调用SECTALIGN 来设置节的对齐属性。

NASM manual section 4.12.12

所以这是一个错字——第二个align 不会做任何事情,因为第一个已经填充到 64 字节对齐。而隐含的SECTALIGN也没有任何作用,因为手动指定了alignment属性只能增加,不能减少。

【讨论】:

  • 有趣的事实:%use smartalign / alignmode p6, 64 将做出比仅填充单字节 NOP 更合理的选择。 (这会浪费解码资源和 uop 缓存空间,甚至会过度填充一个 uop 缓存行,如果在 NOP 执行的函数中使用它可能比不对齐更糟糕。)
猜你喜欢
  • 1970-01-01
  • 2014-10-12
  • 2018-04-26
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 2015-02-17
  • 1970-01-01
  • 2012-12-15
相关资源
最近更新 更多