Прочтите руководство по ГАЗУ (https://sourceware.org/binutils/docs/as/) для получения исчерпывающего списка директив, которые он поддерживает. Обратите внимание, что директивы в основном одинаковы для всех целей, которые поддерживает GAS, а не для синтаксиса AT & T от c до x86. У них немного другая философия дизайна от NASM / YASM, но, по крайней мере, вам не нужно заново изучать их для ARM, AArch64, RIS C -V или чего-либо еще.
В общем, если вы нужно выяснить, как сделать что-то в синтаксисе GAS, проверить руководство и / или скомпилировать некоторые C, которые должны сделать то же самое, например, при https://godbolt.org/z/QUqvL2 компиляции int foo;
в файле
Синтаксис GAS не имеет эквивалента для resw/d/q
, только .space
/ .skip
/ .zero
для resb
. Избыточность наличия трех синонимов для одной и той же вещи исходит от GAS с целью обеспечения совместимости с ассемблерами, предоставляемыми различными историческими поставщиками Unix.
Кроме того, вы можете зарезервировать пространство в BSS без переключение на этот раздел с помощью .section .bss
(или просто .bss
) и затем обратно, используя .lcomm
(неэкспортированный символ) или .comm
(глобальный символ)
Вы должны вручную умножить количество элементов на 2/4/8, чтобы получить количество байтов, например
* 1 036 *
Это, я думаю, логически эквивалентно .pushsection .bss
; label: .space ...
; .popsection
IIR C, вам может понадобиться .section .bss
, если вы хотите использовать .p2align
для придания объекту BSS дополнительного выравнивания. Или используйте 3-й аргумент для .lcommm
Некоторые цели позволяют использовать третий аргумент с .lcomm. Этот аргумент указывает желаемое выравнивание символа в секции bss.