Gas .align 指令无法正常工作
Gas .align instruction doesn't work correctly
我正在使用 gas 并尝试在 16 字节上对齐 .lcomm 缓冲区。
代码:
.align 16
.lcomm Buffer, size
但是使用leal指令检查Buffer的地址时。它似乎没有对齐。我认为 .align 指令不能正常工作。
你有什么想法吗?
当然可以正常使用,但是你用错了。
manual says:
Some targets permit a third argument to be used with .lcomm. This
argument specifies the desired alignment of the symbol in the bss
section.
所以正确的代码是.lcomm Buffer, size, 16
。
请注意,.align
不会影响 .lcomm
,尤其是当您不在 .bss
部分时。如果你想手动分配东西,切换到 .bss
,然后使用 .align
,然后使用 .space
而不是 .lcomm
.
分配
此外,manual gives a workaround suggestion 为:
For targets where the .lcomm directive (see Lcomm) does not accept an
alignment argument, which is the case for most ELF targets, the .local
directive can be used in combination with .comm (see Comm) to define
aligned local common data.
实际上,对于 x86 ELF,不支持对齐参数,因此实现此变通方法如下所示:
.local Buffer
.comm Buffer, size, 16
(感谢 @wumpus-q-wumbley 指出这一点。)
我正在使用 gas 并尝试在 16 字节上对齐 .lcomm 缓冲区。
代码:
.align 16
.lcomm Buffer, size
但是使用leal指令检查Buffer的地址时。它似乎没有对齐。我认为 .align 指令不能正常工作。
你有什么想法吗?
当然可以正常使用,但是你用错了。 manual says:
Some targets permit a third argument to be used with .lcomm. This argument specifies the desired alignment of the symbol in the bss section.
所以正确的代码是.lcomm Buffer, size, 16
。
请注意,.align
不会影响 .lcomm
,尤其是当您不在 .bss
部分时。如果你想手动分配东西,切换到 .bss
,然后使用 .align
,然后使用 .space
而不是 .lcomm
.
此外,manual gives a workaround suggestion 为:
For targets where the .lcomm directive (see Lcomm) does not accept an alignment argument, which is the case for most ELF targets, the .local directive can be used in combination with .comm (see Comm) to define aligned local common data.
实际上,对于 x86 ELF,不支持对齐参数,因此实现此变通方法如下所示:
.local Buffer
.comm Buffer, size, 16
(感谢 @wumpus-q-wumbley 指出这一点。)