В синтаксисе Intel есть комментарии, использующие точку с запятой. Когда я переключился на AT&T, они пытались интерпретировать комментарии.
Каков синтаксис комментариев для сборки AT&T?
В синтаксисе Intel есть комментарии, использующие точку с запятой. Когда я переключился на AT&T, они пытались интерпретировать комментарии.
Каков синтаксис комментариев для сборки AT&T?
Комментарии для ассемблера at&t:
# this is a comment
/* this is a comment */
Согласно четвёртому результату, который дал мне Google а>
Комментарии //
и /* */
поддерживаются только в файлах .S
, потому что GCC запускает на них препроцессор C перед сборкой. Для файлов .s
сам ассемблер (as
) обрабатывает только #
как символ комментария для x86.
Для некоторых других ISA GAS использует другие символы комментариев, например @
для ARM.
Следующее обрабатывается 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 запущен в исходном файле.
В большинстве архитектур поддерживаются:
// Rest of line comment
работает почти так, как вы ожидаете от C.
В редких случаях это вызывает проблемы с .
псевдооперациями. Чтобы обойти это, я просто использую блочный комментарий или просто перемещаю комментарий на предыдущую строку.
/* Use this for block comments */
. В настоящее время я не сталкивался с какими-либо проблемами с этим.
#
или /
.//
и /**/
, чтобы избежать проблем с препроцессором. Однако, если вы помните о скрытых ошибках, все должно быть в порядке./
, либо ##
, чтобы вам не пришлось беспокоиться о препроцессоре или его отсутствии в каком-либо одном файле. ##
более универсален, но может привести к более беспорядочному коду.gcc
делает при компиляции .S
файлов, но не .s
. Тем не менее, написание комментариев, безопасных для использования с CPP или без него, является хорошей идеей.
- person Peter Cordes; 17.12.2019
Попробуйте # или // или /* */. Может работать
.intel_syntax noprefix
использует#
в качестве символа комментария. Вы, вероятно, говорите о других вариантах синтаксиса Intel, таких как NASM или MASM. - person Peter Cordes   schedule 01.08.2020