Gas .align指令无法正常工作

时间:2016-01-27 16:40:50

标签: assembly gas

我正在使用gas并试图将.lcomm缓冲区对齐16个字节。

代码:

.align 16

.lcomm Buffer, size

但是当使用leal指令检查Buffer的地址时。它似乎没有对齐。我认为.align指令不能正常工作。

你有什么想法吗?

1 个答案:

答案 0 :(得分:4)

当然它工作正常,但你错了。 manual says

  

某些目标允许第三个参数与.lcomm一起使用。这个   参数指定bss中符号的所需对齐方式   部分。

所以正确的代码是.lcomm Buffer, size, 16。 请注意,.align不会影响.lcomm,尤其是如果您不在.bss部分。如果您想手动分配内容,请切换到.bss,然后使用.align,然后使用.space而不是.lcomm进行分配。

此外,manual gives a workaround suggestion为:

  

对于.lcomm指令(请参阅Lcomm)不接受的目标   alignment参数,大多数ELF目标的情况,.local   指令可以与.comm(请参阅Comm)结合使用来定义   对齐当地的共同数据。

实际上,对于x86 ELF,不支持alignment参数,因此实现此解决方案将如下所示:

.local Buffer
.comm Buffer, size, 16

(感谢@wumpus-q-wumbley指出这一点。)