AT&Tのx86アセンブラ構文と文法の基本的な違い

AT&Tアセンブラと8086アセンブラ言語、2は非常に似ていますが、それでもAT&Tは、文法8086の規則に従って、それをコンパイル読み取ることができないので、我々は、コードのハードウェア部分を扱う、カーネルコードを読むときので、文法AT&Tアセンブラの規則になっているはずですが、 AT&Tはその必然的に、AT&Tアセンブラに遭遇し、それ以下のAT&Tアセンブラ構文規則を見て、アセンブリで書かれています。

第一の場合、
  命令フォーマットINTELの大文字、およびAT&T形式の小文字。
例:
 
INTEL AT&T
MOV EAX、EBX EBX MOVL%、%EAX 
 
2つのオペランド割当方向
  INTEL構文では、最初は、デスティネーション・オペランドを表し、第2のソース・オペランドは、右から左への割り当てを表します。
最初のソース・オペランドのAT&T構文では、第二オペランドは、オブジェクト、自然に沿って、左から右への方向です。
例:
インテルAT&T
MOV EAX、EBX、EAX%EBX MOVL%で 
 
3つのプレフィックス
  インテル構文レジスタとすぐに必要ではない接頭辞で、AT&Tは「%」で始まるレジスタと、すぐに
接頭辞「$」。
例:
INTEL AT&T
MOV EAX ,. 1つのMOVLの$ 1、%EAX。
 
ようなシンボリック定数の直接参照、無接頭辞:MOVL値、%のEBX、値が一定で、シンボル
番号プレフィックス$前は、MOVLとして参照シンボリックアドレスを表し、 $値、%のEBXは、EBXにアドレスの値です。
 
バスロック接頭辞「ロック」:バスロック操作。Linuxカーネルのコードの多くで「ロック」の接頭辞、特に
顕著SMPコード。他のCPUバスロックは、ロックされたメモリのアドレスでアクセスすることができないとき。
そして、命令プリフィックス「L」、それぞれLJMP、LCALL、とのサブリモートプロシージャコールジャンプ命令オペコード
擬似LRET対応するリターン命令。
例:
インテルAT&T
CALL FAR SECTION:OFFSET LCALLする$ secion:$オフセット
SECTION JMP FARを:OFFSET LJMP $のsecion:$オフセット
RET FAR SATCK_ADJUST LRET $ stack_adjust 
 
 
4、間接アドレッシング構文
  インテルベースアドレスを"["、 "]" 、使用中のAT&Tの"("、 ")"、さらに複雑なオペランドの
構文は、INTELがsegregで異なっている:[スケール*ベース+インデックス + DISP]、 およびAT&Tのように
%のsegreg:DISP(ベース、 segreg、指標、尺度、DISPは、指定に任意であることを特徴とする請求指数、販売)、
1のデフォルト値とインデックスを明示的にスケールを指定されていない場合。スケールとDISPは、接頭辞を追加する必要はありません「&」を
INTEL AT&T
INSTRの
  FOO、segreg:[ベース+インデックス*スケール+ DISP]
InStr関数
  %segreg:DISP(ベース、インデックススケール)、FOO 
 
5つのサフィックス
  最後の文字AT&T構文最も命令演算コードは、オペランドのサイズを示し、 「b」はバイト(いずれかを表す
バイト)、ワード(2バイト)を表し、「W」、「L」は長い(4バイト)を表します。プロセスのメモリオペランドINTELで
持っているときと同様の構文は次のとおりです。BYTE PTR、WORD PTR、DWORD PTR。
例:
INTEL AT&T
MOVのAl、BL MOVB%BL、%のAl
MOV AX、BX MOVW%BX、%のAX
MOV EAX、DWORD PTR [EBX] MOVL(%EBX)、%EAX
 
AT&Tのアセンブリ命令のオペランド拡張命令でサフィックスを持って、ワード長は、ソースオペランド、他の指定
指定されたワードデスティネーションオペランドとを。AT&Tの符号拡張命令は「MOVS」は、ゼロ拡張命令(に対応する「movz」である
インテル命令「movsx」および「movzx」)。したがって、「movsbl%のAl、%のEDX 」 アルレジスタが示す
バイトデータを符号拡張ワード長のバイトを、演算結果をレジスタEDXに格納されます。以下の許可された操作の一部である
拡張サフィックスオペランド:  
BL:バイト- >ロング 
BW:バイト- >ワード 
WL:ワード- >ロングワードは、 
 
符号命令ジャンプ方向ジャンプサフィックス、「F」は意味します正面(前方)、 "b"は、後方(背面)を表します。 
例:

JMP 1F  

JMP部1b


オリジナルリンクします。https://blog.csdn.net/bigloomy/article/details/6581754

おすすめ

転載: www.cnblogs.com/YangARTuan/p/11627833.html