Синтаксис комментариев для сборки синтаксиса x86 AT&T

В синтаксисе Intel есть комментарии, использующие точку с запятой. Когда я переключился на AT&T, они пытались интерпретировать комментарии.

Каков синтаксис комментариев для сборки AT&T?


person ihsoy ih    schedule 03.07.2013    source источник
comment
GAS .intel_syntax noprefix использует # в качестве символа комментария. Вы, вероятно, говорите о других вариантах синтаксиса Intel, таких как NASM или MASM.   -  person Peter Cordes    schedule 01.08.2020


Ответы (3)



Комментарии GNU AS

Следующее обрабатывается as напрямую. (Не препроцессор C.)

  • # Комментарии — работает как комментарий к остальной части строки.

    Важное предостережение: # также является символом директивы препроцессора GCC. Препроцессор запускается первым, поэтому это означает, что если вы запускаете его,

    # include comments in your code to get full credit
    

    в начале строки (пробелы не учитываются) даст вам error: #include expects "FILENAME" or <FILENAME> с gcc, даже с пробелом после #.

    Однако они чувствительны к регистру, поэтому использование заглавной буквы # Include действительно работает:

    # Include comments in your code to get full credit
    

    Хотя в любом случае рекомендуется писать первую букву комментария с заглавной буквы, вы можете использовать ## на всякий случай. (Только не используйте его ни в каких строках, которые являются частью макроса #define, потому что ## также является оператором вставки токена.)

  • / комментарии — начало строки комментария

    Их можно использовать только в начале строки (после удаления пробелов).

    / This is OK
    xor %eax, %eax / This is *not* ok
    

Комментарии в стиле C (препроцессор)

Они работают, если препроцессор C запущен в исходном файле.

В большинстве архитектур поддерживаются:

  • // Rest of line comment работает почти так, как вы ожидаете от C.

    В редких случаях это вызывает проблемы с . псевдооперациями. Чтобы обойти это, я просто использую блочный комментарий или просто перемещаю комментарий на предыдущую строку.

  • /* Use this for block comments */. В настоящее время я не сталкивался с какими-либо проблемами с этим.

Итак, что я использую?

  • Если вам не разрешено выполнять предварительную обработку всего, выберите один из стилей комментариев GNU AS, # или /.
  • Если вы уверены, что обработаете все, может быть безопаснее использовать комментарии в стиле C // и /**/, чтобы избежать проблем с препроцессором. Однако, если вы помните о скрытых ошибках, все должно быть в порядке.
  • Если вас беспокоит необходимость обработки обоих, выберите либо /, либо ##, чтобы вам не пришлось беспокоиться о препроцессоре или его отсутствии в каком-либо одном файле. ## более универсален, но может привести к более беспорядочному коду.
  • В любом случае, выберите один и будьте последовательны.
person Calculuswhiz    schedule 30.04.2015
comment
Вы не должны обязаны предварительно обрабатывать файлы синтаксиса AT&T. gcc делает при компиляции .S файлов, но не .s. Тем не менее, написание комментариев, безопасных для использования с CPP или без него, является хорошей идеей. - person Peter Cordes; 17.12.2019

Попробуйте # или // или /* */. Может работать

person john    schedule 03.07.2013