私にとって、インテルの構文ははるかに読みやすいです。Intel 構文だけに集中してアセンブリ フォレストをたどると、何か見落としますか? AT&T に切り替えたい理由はありますか (他の人の AT&T アセンブリを読み取ることができる以外に) ? 私の最初の手がかりは、gdb がデフォルトで AT&T を使用していることです。
これが重要な場合、私の焦点は、アセンブリと構文が Linux/BSD および C 言語に関係する可能性があるものだけです。
私にとって、インテルの構文ははるかに読みやすいです。Intel 構文だけに集中してアセンブリ フォレストをたどると、何か見落としますか? AT&T に切り替えたい理由はありますか (他の人の AT&T アセンブリを読み取ることができる以外に) ? 私の最初の手がかりは、gdb がデフォルトで AT&T を使用していることです。
これが重要な場合、私の焦点は、アセンブリと構文が Linux/BSD および C 言語に関係する可能性があるものだけです。
実際には、一方が他方より優れているということはありません。Intel の構文の方がはるかに読みやすいという点には同意します。私の知る限り、すべてのGNUツールにはIntel構文も使用するオプションがあることに注意してください。
これでGDBにIntel構文を使用させることができるようです:
分解フレーバーインテルを設定する
GCC は で Intel 構文を実行できます-masm=intel
。
GNU アセンブラー (GAS) の主要な構文は AT&T です。Intel 構文は比較的新しく追加されたものです。Linux カーネルの x86 アセンブリは AT&T 構文です。Linux の世界では、これが一般的な構文です。MS の世界では、Intel 構文がより一般的です。
個人的には、AT&T 構文が嫌いです。Intel 構文をサポートする GAS とともに無料のアセンブラ (NASM、YASM) もたくさんあるので、Linux で Intel 構文を実行しても問題はありません。
それを超えると、それは単なる構文の違いです。両方の結果は、同じ x86 マシン コードになります。
実際には、一方が他方より優れているということはありません。個人的には Intel の構文が嫌いなので、Intel の構文の方がはるかに読みやすいという意見には同意しません。私の知る限り、すべての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]
...そして、より複雑な命令ではより複雑になります
'言っ途切れる。
PS:この回答は主に、実際には回答ではなく意見である他の回答の弱点を強調する(IMHO)という理由で存在します。そしてもちろん、実際のこの答えは私の謙虚な意見に過ぎません。
PPS: 私はインテルの構文が嫌いではありません。気にしないだけです。
それは「同じ言語」であり、同じマシンコードにコンパイルされ、同じオペコードなどを持っています。一方、GCC をまったく使用している場合は、AT&T 構文を学びたいと思うでしょう。デフォルト - それを取得するためにコンパイラ オプションなどを変更する必要はありません。
私も Intel-syntax x86 ASM (DOS 上でも) に慣れ、C/UNIX に切り替えた当初はより直感的であることがわかりました。しかし、一度 AT&T を学ぶと、同じように簡単に見えます。
あまり考えたくありませんが、Intel を知っていれば AT&T を学ぶのは簡単ですし、その逆も同じです。実際の言語を理解するのは、構文よりもはるかに困難です。ですから、必ず一方に集中して、もう一方が出てきたらそれを学びましょう。
使用されているものに喜んで順応するのは、プロフェッショナリズムのしるしです。どちらにとっても本当の利点はありません。intel 構文は Microsoft の世界では一般的であり、AT&T は Linux/Unix の標準です。どちらにもメリットがないので、人は最初に見たものに刷り込む傾向があります。とはいえ、プロのプログラマーはそのようなことを上に上げます。仕事で、またはあなたが働いているドメインで彼らが使用するものは何でも使用してください。
Intel 構文はすべてをカバーしています (アセンブラ/逆アセンブラが最新であり、最新のジャンク Intel が命令セットに追加されていると仮定します)。at&tも同じだと思います。
at&t インテル 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]
...そして、より複雑な命令ではより複雑になります
'言っ途切れる。
私の最初のアセンブリ言語はMIPSでしたが、これはATT構文と非常によく似ていることに気づきました。だから私はATT構文が好きですが、それを読める限り、それは実際には問題ではありません。