Подтвердить что ты не робот

Ограничения синтаксиса сборки Intel по сравнению с AT & T

Мне синтаксис Intel намного проще читать. Если я перейду через сборку леса, концентрируясь только на синтаксисе Intel, я пропущу что-нибудь? Есть ли какая-то причина, по которой я бы хотел переключиться на AT & T (за пределами возможности читать другие AT & T-сборку)? Моя первая подсказка заключается в том, что gdb использует AT & T по умолчанию.

Если это имеет значение, мое внимание сосредоточено только на любой сборке связей, и синтаксис может быть связан с Linux/BSD и языком C.

4b9b3361

Ответ 1

Нет никакого преимущества для одного над другим. Я согласен с тем, что синтаксис Intel значительно легче читать. Имейте в виду, что AFAIK, все инструменты GNU также могут использовать синтаксис Intel.

Похоже, вы можете заставить GDB использовать синтаксис Intel с этим:

set disassembly-flavor intel

GCC может использовать синтаксис Intel с -masm=intel.

Ответ 2

Основной синтаксис для ассемблера GNU (GAS) - AT & T. Синтаксис Intel является относительно новым дополнением к нему. сборка x86 в ядре Linux находится в синтаксисе AT & T. В мире Linux это общий синтаксис. В мире MS синтаксис Intel более распространен.

Лично я ненавижу синтаксис AT & T. Существует множество бесплатных ассемблеров (NASM, YASM) вместе с GAS, которые поддерживают синтаксис Intel, поэтому не будет никаких проблем с синтаксисом Intel в Linux.

Помимо этого, это просто синтаксическая разница. Результатом обоих будет тот же машинный код x86.

Ответ 3

Нет никакого преимущества для одного над другим. Я не согласен с тем, что синтаксис Intel намного легче читать, потому что лично я ненавижу синтаксис Intel. Имейте в виду, что AFAIK, все инструменты GNU также могут использовать синтаксис Intel.

at&t noprefix                   intel
mov eax, -4(ebp,edx,4)          mov DWORD PTR[-4 +ebp +edx *4], eax
mov eax, -4(ebp)                mov DWORD PTR[-4 +ebp], eax
mov edx, (ecx)                  mov DWORD PTR[ecx], edx
lea (   ,eax,4), eax            lea eax, DWORD PTR[8 + eax*4]
lea (eax,eax,2), eax            lea eax, DWORD PTR[eax*2+eax]

... и он усложняется с более сложными инструкциями

'nuff сказал.

PS: Этот ответ существует главным образом по причине выделения (IMHO) слабостей в некоторых других ответах, которые на самом деле не являются ответами, а мнениями. И, конечно, этот ответ на самом деле - это только мое скромное мнение.

PPS: Я не ненавижу синтаксис Intel, мне просто все равно.

Ответ 4

Это "тот же язык", в котором он компилируется с одним и тем же машинным кодом, имеет одинаковые коды операций и т.д. С другой стороны, если вы вообще используете GCC, вам, вероятно, захочется изучить AT & T синтаксис, просто потому, что он по умолчанию - не меняет параметры компилятора и т.д., чтобы получить его.

Я тоже порезал свои зубы по синтаксису Intel x86 ASM (на DOS тоже) и нашел его более интуитивно понятным при переключении на C/UNIX. Но как только вы узнаете AT & T, это будет выглядеть так же просто.

Я бы не стал так много думать - легко узнать AT & T, как только вы узнаете Intel, и наоборот. Фактический язык намного сложнее получить в вашей голове, чем синтаксис. Поэтому непременно сосредоточьтесь на одном, а затем изучите другое, когда оно появится.

Ответ 5

Это признак профессионализма, который вы готовы приспособиться к тому, что используется. Нет никакого реального преимущества тому или другому. Синтаксис Intel распространен в мире Microsoft, AT & T является стандартом в Linux/Unix. Поскольку нет никакого преимущества ни одному, люди склонны отпечатываться на том, что они видели вначале. Тем не менее, профессиональный программист поднимается над такими вещами. Используйте все, что они используют на работе, или в домене, в котором вы работаете.

Ответ 6

Синтаксис Intel охватывает все (при условии, что ассемблер/дизассемблер обновлен с последним нежелательным Intel, добавленным в их набор команд). Я уверен, что это то же самое.

at&t                             intel
movl -4(%ebp, %edx, 4), %eax     mov eax, [ebp-4+edx*4]
movl -4(%ebp), %eax              mov eax, [ebp-4]
movl (%ecx), %edx                mov edx, [ecx]
leal 8(,%eax,4), %eax            lea eax, [eax*4+8]
leal (%eax,%eax,2), %eax         lea eax, [eax*2+eax]

... и он усложняется с более сложными инструкциями

'nuff сказал.

Ответ 7

Мой первый язык ассемблера был MIPS, который, как я заметил, очень похож на синтаксис ATT. Поэтому я предпочитаю синтаксис ATT, но это не имеет большого значения, пока вы можете его прочитать.