2012-03-24 2 views
2

によって困惑私が書いたアセンブリコードファイル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です。どうしてか分かりません。

+0

アセンブリ構文は、OSやハードウェアではなく、コンパイラにのみ関連しているので、それは原因ではありません。AT&T構文を試しましたか?このセクションの末尾にある表を試してください。http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#s3 – Irfy

+5

大括弧は変わっていますが、dword ptrはその外に属しています。 –

+1

私はむしろ最初の場所で動作するために使用されたコードが驚いています。 – harold

答えて

1

最近学んだように、 lea ebx, DWORD PTR [ds:eax]になるはずです。
あなたの目標がebxでこれらのポインタを押すだけなら、私はあなたがpush DWORD PTR [ds:eax]と書くことができるはずだと思います。しかし、これがGCCアセンブラで動作するかどうかはわかりません。

関連する問題