Документы GNU GAS
В разделе Machine Dependencies перейдите в каждую арку, а затем в синтаксис и символы.
Это документирует комментарии к каждой арке.
x86
https://sourceware.org/binutils/docs-2.26/as/i386_002dChars.html#i386_002dChars
Наличие символа '#' в любом месте строки указывает на начало комментария, который продолжается до конца этой строки.
Если '#' появляется как первый символ строки, тогда вся строка рассматривается как комментарий, но в этом случае строка также может быть директивой логического номера строки (см. Комментарии) или командой управления препроцессором (см. Предварительная обработка) .
Если опция командной строки --divide не указана, то символ '/', появляющийся в любом месте строки, также вводит комментарий к строке.
Однако я либо что-то упускаю, либо есть ошибка, так как мои тесты не соответствуют документации.
OK:
/ mycomment
# mycomment
nop # mycomment
Потерпеть поражение:
nop / mycomment
Это говорит о том, что /
работает, только если это первый символ.
И --divide
не имело никакого значения.
рука
https://sourceware.org/binutils/docs-2.26/as/ARM_002dInstruction_002dSet.html#ARM_002dInstruction_002dSet
Наличие символа «@» в любом месте строки указывает на начало комментария, которое продолжается до конца этой строки.
Если '#' появляется как первый символ строки, тогда вся строка рассматривается как комментарий, но в этом случае строка также может быть директивой логического номера строки (см. Комментарии) или командой управления препроцессором (см. Предварительная обработка) .
Мои тесты с arm-linux-gnuabihf-as
подтверждают то, что написано в документации.
OK:
# mycomment
@ mycomment
nop @ mycomment
Потерпеть поражение:
nop # mycomment
aarch64
https://sourceware.org/binutils/docs-2.26/as/AArch64_002dChars.html#AArch64_002dChars
Наличие символа «//» в строке указывает на начало комментария, который продолжается до конца текущей строки. Если символ # появляется как первый символ строки, вся строка рассматривается как комментарий.
Кроме того, это также поддерживается в руководстве по ARMv8-fb по адресу C1.2 Структура самого языка ассемблера A64:
В примере C1-1 на странице C1-185 последовательность // используется в качестве лидера комментария, и ассемблерам A64 рекомендуется принять этот синтаксис.
Мои тесты с aarch64-linux-gnuabihf-as
подтверждают то, что написано в документации.
OK:
// mycomment
# mycomment
nop // mycomment
Потерпеть поражение:
nop # mycomment
Личная рекомендация
Если вы можете выбрать, просто всегда компилируйте свою сборку с gcc
или явно используйте препроцессор C cpp
и используйте комментарии препроцессора C:
/* mycomment */
так как:
- C стандартизирован, и он будет работать для всех арок
- препроцессор C вам понадобится в любом случае, потому что макросы GNU GAS недостаточно мощны
#
плохо, так как может конфликтовать с #
директивами препроцессора.
Проверено на Ubuntu 16.04, Binutils 2.26.1.
person
Ciro Santilli 新疆再教育营六四事件ۍ
schedule
23.08.2018
Makefile
для предварительной обработки исходного кода, чтобы преобразовать синтаксис комментария по вашему выбору в синтаксис комментария, действительный для GNU AS. - person nrz   schedule 27.03.2013as
(2.20.1, x86_64-linux-gnu) принимает/
,//
и#
в качестве стартеров комментариев. - person Michael   schedule 27.03.2013/
работает вas
, только если это первый символ в строке. Нельзя ставить его после инструкции, чтобы закомментировать оставшуюся часть строки. - person mghis   schedule 27.03.2013#
. Если вас это отвлекает при чтении кода, вы можете последовать совету nrz. - person Michael   schedule 27.03.2013/
на оператор деления. Фактически, использование комментариев GNU характерно для реализации GNU AS и не может быть найдено в других ассемблерах UNIX. Если кому-то будет полезно, измените строки 329-330 binutils-2.23 / gas / config / tc-i386.c наconst char *i386_comment_chars = "#/";
,#define SVR4_COMMENT_CHARS 1
,#define PREFIX_SEPARATOR '\\'
. - person mghis   schedule 13.05.2013cat source.s | sed 's|^#|/|g'
. - person jww   schedule 26.02.2018