GAS поддерживает как комментарии //
, так и комментарии @
, даже без использования препроцессора C для обработки комментариев в стиле C / C ++.
(Назовите файл foo.S
с заглавной буквы S и gcc -c foo.S
сначала пройдут через CPP, поэтому вы можете использовать #define
и #if 0
и все в таком духе.)
«Кодированный» означает представимость в машинном коде. например, MOVK x1, #0x40000
не является ошибкой синтаксиса , это ошибка на более позднем этапе, чем синтаксический анализ, потому что нет способа представить его с указанием c числа в машинном коде с этим кодом операции. Но mov x1, #0x40000
хорошо, потому что ассемблер может выбрать кодировку битового диапазона для orr
-посредственно с xzr
. Обратите внимание, что это AArch64, который использует машинный код, отличный от ARM.
Синтаксис GAS ARM такой же, как и в официальных документах ARM. Директивы отличаются от ARMasm Кейла , но синтаксис командных строк (в основном?) идентичен. @old_timer говорит, что есть или были некоторые различия с синтаксисом mrc
и mcr
, но по большей части GAS стремится быть совместимым со стандартным синтаксисом ARM.
См. руководство по GAS Зависимые от ARM функции * глава 1029 *, включая раздел о синтаксисе.
(Обратите внимание, что ARM имеет несколько различных режимов синтаксиса, «унифицированный» и более старый, который использовал другой синтаксис для ARM и Режим большого пальца. Обычно вы хотите .syntax unified
)
Вы всегда можете посмотреть примеры вывода компилятора G CC C (например, на https://godbolt.org/z/Tk_jrD), хотя для конкретного c на случай, если вам придется написать C функцию, в которой G CC будет использовать интересующий вас режим инструкции или адресации. G CC использует директивы GAS.