Как заставить ассемблер GNU использовать косую черту / для комментариев?


Это действительно глупая идиосинкразия с моей стороны, но я не выношу того, как GNU AS использует для вставки комментария. Я слишком привык к способу Sun (тот же, что используется в большинстве ассемблеров UNIX), который использует простую косую черту"/", чтобы закомментировать код до конца строки.

Знаете ли Вы способ выполнить мою маленькую прихоть?

3 9

3 ответа:

GNU GAS docs

В разделе " машинные зависимости" перейдите в каждую арку, а затем в "синтаксис" и "символы".

Это документальное подтверждение того, что комментарии относятся к каждой арке.

X86

Https://sourceware.org/binutils/docs-2.26/as/i386_002dChars.html#i386_002dChars

Наличие'#', появляющегося в любом месте строки, указывает на начало комментария, который продолжается до конца этого комментария. линия.

Если ' # ' появляется в качестве первого символа строки, то вся строка рассматривается как комментарий, но в этом случае строка также может быть директивой логического номера строки (см. комментарии) или командой управления препроцессором (см. препроцессор).

Если параметр командной строки --divide не указан, то символ'/', появляющийся в любом месте строки, также вводит комментарий к строке.

Однако, я либо что-то упускаю, либо есть ошибка, поскольку мои тесты не соответствуют документации.

ОК:

/ mycomment
# mycomment
nop # mycomment

Сбой:

nop / mycomment
Это предполагает, что / работает только в том случае, если это первый символ.

И --divide не имели никакого значения.

Arm

Https://sourceware.org/binutils/docs-2.26/as/ARM_002dInstruction_002dSet.html#ARM_002dInstruction_002dSet

Наличие " @ " в любом месте строки указывает на начало комментария, который распространяется на конец этой линии.

Если ' # ' появляется в качестве первого символа строки, то вся строка рассматривается как комментарий, но в этом случае строка также может быть директивой логического номера строки (см. комментарии) или командой управления препроцессором (см. препроцессор).

Мои тесты с arm-linux-gnuabihf-as подтверждают то, что документация говорит.

ОК:

# mycomment
@ mycomment
nop @ mycomment

Сбой:

nop # mycomment

Aarch64

Https://sourceware.org/binutils/docs-2.26/as/AArch64_002dChars.html#AArch64_002dChars

Наличие //' on a line indicates the start of a comment that extends to the end of the current line. If a#' появляется как первый символ строки, вся строка рассматривается как комментарий.

Мои тесты с aarch64-linux-gnuabihf-as подтверждают то, что написано в документации.

ОК:

// mycomment
# mycomment
nop // mycomment

Сбой:

nop # mycomment

Личное рекомендация

Если вы можете выбрать, просто всегда компилируйте сборку с помощью gcc или явно используйте препроцессор C cpp и используйте комментарии препроцессора C:

/* mycomment */

Потому что:

  • C стандартизирован, и он будет работать для всех archs
  • Препроцессор C вам понадобится в любом случае, потому что макросы GNU GAS недостаточно мощны
  • # плохо, так как это может конфликтовать с директивами препроцессора#

Проверено на Ubuntu 16.04, Binutils 2.26.1.

В ассемблере Gnu начальный символ комментария является целевым. Для i386 и x86_64 это #. Для ARMv7 это @.

Некоторые другие соглашения о комментариях работают при определенных условиях. Я не уверен в деталях. // comment starter и / * * / многострочные комментарии-примеры, которые я видел.

Да, продолжайте использовать #, и вы привыкнете к этому.

Могут быть способы заставить / работать, но тогда ваш код не просто специфичен для процессора, но буквально специфичен для компьютера. Вы лучше привыкнете к мелочам, чем полностью разрушите переносимость вашего кода, чтобы выдумать каприз.