によって困惑私が書いたアセンブリコードファイルgpi.S:のWindows 7ホスト上のVMwareプレーヤーでのCentOS 5.5を使用してx86アセンブリ構文
.intel_syntax noprefix
... /* cut off some code */
lea eax, string_label
mov ebx, [DWORD PTR ds:eax]
push ebx
mov ebx, [DWORD PTR cs:eax]
push ebx
... /* cut off some code */
コンパイル:
gcc -o gpi gsi.S
それはOKです。
私は後に、同じコマンドを使用して、同じアセンブリコードをコンパイルし、VMware社の新しいCentOSのバージョン6.2をインストールし、私はいくつかのエラーが見つかりました:
組立メッセージ:
Error: invalid use of register
これらのエラーがポイントに
mov ebx, [DWORD PTR ds:eax]
mov ebx, [DWORD PTR cs:eax]
CentOS 6.2では、GNU gccのバージョンは4.6.6です。 GNUバージョンは2.20.51.0.2(i686-redhat-lnux)です。
私は2行が標準のIntelアセンブリ構文を使用していると思うので、CentOS 5.5ではOKです。どうしてか分かりません。
アセンブリ構文は、OSやハードウェアではなく、コンパイラにのみ関連しているので、それは原因ではありません。AT&T構文を試しましたか?このセクションの末尾にある表を試してください。http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#s3 – Irfy
大括弧は変わっていますが、dword ptrはその外に属しています。 –
私はむしろ最初の場所で動作するために使用されたコードが驚いています。 – harold