Для меня синтаксис Intel намного легче читать. Если я буду бродить по лесу сборок, концентрируясь только на синтаксисе Intel, пропущу ли я что-нибудь? Есть ли причина, по которой я хотел бы перейти на AT&T (помимо возможности читать чужие сборки AT&T)? Моя первая подсказка заключается в том, что GDB по умолчанию использует AT&T.
Если это имеет значение, я сосредоточусь только на сборке и синтаксисе отношений, которые могут иметь отношение к Linux / BSD и языку C.
Ответы:
У одного действительно нет преимущества перед другим. Я согласен с тем, что синтаксис Intel намного легче читать. Имейте в виду, что, AFAIK, все инструменты GNU также могут использовать синтаксис Intel.
Похоже, вы можете заставить GDB использовать синтаксис Intel следующим образом:
GCC может работать с синтаксисом Intel с
-masm=intel
.источник
lea -0x30(%rcx,%rax,8),%eax
запутанный ATT дляlea eax,[rcx+rax*8-0x30]
. Использование + и * действительно помогает в стиле Intel.Основной синтаксис для ассемблера GNU (GAS) - AT&T. Синтаксис Intel - относительно новое дополнение к нему. Сборка x86 в ядре Linux имеет синтаксис AT&T. В мире Linux это общий синтаксис. В мире MS синтаксис Intel более распространен.
Лично я ненавижу синтаксис AT&T . Существует множество бесплатных ассемблеров (NASM, YASM), а также GAS, которые также поддерживают синтаксис Intel, поэтому проблем с синтаксисом Intel в Linux не возникнет.
Кроме того, это просто синтаксическая разница. Результатом обоих будет один и тот же машинный код x86.
источник
У одного действительно нет преимущества перед другим. Я не согласен с тем, что синтаксис Intel намного легче читать, потому что лично я ненавижу синтаксис Intel . Имейте в виду, что, AFAIK, все инструменты GNU также могут использовать синтаксис Intel.
... и все усложняется с более сложными инструкциями
'достаточно.
PS: Этот ответ существует в основном по причине выделения (ИМХО) слабых мест в некоторых других ответах, которые на самом деле являются не ответами, а мнениями. И, конечно, на самом деле это лишь мое скромное мнение.
PPS: Я не ненавижу синтаксис Intel, мне все равно.
источник
SOMEWORD PTR[]
если размер операнда ясен из контекста. Но он вам понадобится в случае немедленного перемещения в место в памяти (какl
от AT&T, так и от DWORD PTR от Intel). И да, мой пример довольно надуманный, но и ваш тоже. Если вы все еще не понимаете, почему: вы не учли ненужные слова в Intel, но оставили их в AT&T. Вы выбираете операнды таким образом, чтобы они хорошо согласовывались в Intel, но не делайте этого в AT&T.-4(ebp,edx,4)
что лучше чем[4*edx+ebp-4]
? Я считаю последнее более интуитивным.Это «тот же язык» в том смысле, что он компилируется в один и тот же машинный код, имеет одинаковые коды операций и т. Д. С другой стороны, если вы вообще используете GCC, вы, вероятно, захотите изучить синтаксис AT&T просто потому, что он по умолчанию - без изменения параметров компилятора и т. д., чтобы получить его.
Я тоже нарезал себе зубы на Intel-синтаксис x86 ASM (в том числе и на DOS), и сначала нашел его более интуитивным при переходе на C / UNIX. Но как только вы изучите AT&T, все будет выглядеть так же просто.
Я бы не стал так сильно об этом думать - выучить AT&T легко, если вы знаете Intel, и наоборот. Реальный язык гораздо сложнее понять, чем синтаксис. Поэтому в любом случае просто сосредоточьтесь на одном, а затем изучите другой, когда он появится.
источник
То, что вы готовы приспосабливаться ко всему, что используется, - признак профессионализма. Ни у одного из них нет реальных преимуществ. Синтаксис Intel распространен в мире Microsoft, AT&T является стандартом для Linux / Unix. Поскольку ни у одного из них нет никаких преимуществ, люди склонны запечатлеть все, что увидят первым. Тем не менее, профессиональный программист стоит выше подобных вещей. Используйте все, что они используют на работе или в той области, в которой вы работаете.
источник
Синтаксис Intel охватывает все (при условии, что ассемблер / дизассемблер обновлен с последним мусором, добавленным Intel в их набор инструкций). Я уверен, что у & t то же самое.
... и все усложняется с более сложными инструкциями
'достаточно.
источник
Моим первым языком ассемблера был MIPS, который, как я заметил, очень похож на синтаксис ATT. Поэтому я предпочитаю синтаксис ATT, но это не имеет значения, если вы его читаете.
источник
lea -0x30(%rcx,%rax,8),%eax
иlea eax,[rcx+rax*8-0x30]
Йоргенсен, размещенный выше. И в отличие от AT&T, MIPS, как и все остальные, по-прежнему использует формат «сначала адресат». Кроме того, номер MIPS не обязательно должен начинаться с префикса $, а имена регистров в MIPS короткие, поэтому не очень неудобно иметь% полностью, как у AT&T