web-dev-qa-db-ja.com

AT&Tと比較したIntelアセンブリ構文の制限

私にとって、Intel構文は読みやすいです。 Intel構文のみに集中してアセンブリフォレストを通過すると、何か見逃しますか? AT&Tに切り替えたい理由はありますか(他のAT&Tアセンブリを読むことができる以外)。私の最初の手がかりは、gdbがデフォルトでAT&Tを使用していることです。

これが重要な場合は、アセンブリと構文がLinux/BSDおよびC言語に関係する可能性のある関係にのみ焦点を当てます。

78
oevna

どちらに比べても、実際には利点はありません。インテルの構文はmuchの方が読みやすいことに同意します。私の知る限り、すべてのGNUツールにはIntel構文も使用するオプションがあります。

次のようにGDBにIntel構文を使用させることができるようです:

 disassembly-flavor intelを設定

GCCは、-masm=intelを使用してIntel構文を実行できます。

71
Zifre

GNUアセンブラー(GAS)の主な構文はAT&Tです。Intel構文は比較的新しい追加です。Linuxカーネルのx86アセンブリはAT&T構文です。Linuxの世界では、一般的な構文:MSの世界では、Intelの構文がより一般的です。

個人的には、I AT&T構文が嫌いです。 Intel構文もサポートするGASに加えて、無料のアセンブラ(NASM、YASM)がたくさんあります。そのため、LinuxでIntel構文を実行しても問題はありません。

それを超えて、それは単なる構文上の違いです。両方の結果は同じx86マシンコードになります。

40
Mehrdad Afshari

どちらに比べても、実際には利点はありません。個人的には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:Intelの構文は嫌いではありません。気にしません。

30
Gunther Piez

「同じ言語」であり、同じマシンコードにコンパイルされ、同じオペコードなどを持っています。一方、GCCを使用している場合は、AT&T構文を習得することをお勧めします。デフォルト-取得するためにコンパイラオプションなどを変更しません。

私も(DOS上でも)Intel-syntax x86 ASMで歯を切ってみましたが、最初はC/UNIXに切り替えたときにより直感的になりました。しかし、AT&Tを習得すると、同じように簡単に見えます。

Intelを知ったらAT&Tを習得するのは簡単ですが、逆もまた同様です。実際の言語は、構文よりも頭に入れるのがはるかに困難です。ですから、必ず1つに焦点を合わせ、それが現れたらもう一方を学びます。

21
Jacob B

これは、使用しているものに順応するというプロ意識の表れです。どちらにも本当の利点はありません。 Intel構文はMicrosoftの世界では一般的ですが、AT&TはLinux/Unixの標準です。どちらにも利点がないため、人々は最初に見たものに刻み込む傾向があります。そうは言っても、プロのプログラマーはそのようなことを上に挙げます。職場で使用しているもの、または作業中のドメインで使用しているものはすべて使用します。

20
Patrick

Intel構文はすべてをカバーします(アセンブラー/逆アセンブラーが最新で、最新のジャンクIntelが命令セットに追加されていると仮定します)。 at&tも同じだと確信しています。

 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] 

...そして、より複雑な命令でより複雑になります

'言っ途切れる。

私の最初のアセンブリ言語はMIPSでしたが、これはATT構文に非常に似ていることに気付きました。だから私はATT構文を好むが、それを読むことができる限りそれは本当に問題ではない。

3
gsk