2

Windows Vista x86を使用しながら、FASMで簡単なアプリケーションを作成しました。アプリケーションはコンパイルされ、エラーなしで正常に実行されました。

次に、まったく同じソースコード(文字通り同じファイル)を、WindowsVistax64を実行している他のPCに移動しました。ソースコードをコンパイルすると、エラーが発生しました。

x86の場合、次のように簡単に始めることができます。

include "win32a.inc"
entry start

x64でコンパイルするときは、次のようなものを使用する必要がありました。

format PE GUI 4.0
include "win32a.inc"
entry start

もう1つの問題(私の主な関心事)は、x86でいつ使用できるかということです。

.if dword [var] = "1234"
    ;Do something here
.endif

しかし、x64で同じコードをコンパイルしていると、次の行が強調表示された「IllegalInstruction」が表示されます。

.if dword [var] = "1234"

x64でこれを行う別の方法はありますか?

また、両方で互換性がある場所にコーディングするにはどうすればよいですか?x86でコンパイルすると、結果の出力はx64で正常に実行されると思いますか?

最後に、これはアーキテクチャ以外の何かと関係がある可能性がありますか?

4

1 に答える 1

2

最新バージョンのFASMで使用する古いMASMコードをいくつか掘り下げました。.ifマクロを使用するには、これを追加する必要がありました。

include 'MACRO/IF.INC'

と同様:

include "win32a.inc"

コンパイルするために。を含めずに不正な命令エラーが発生することに注意してくださいmacro/if.inc

たぶん、win32a.inc古い32ビットシステムのバージョンに.ifマクロが含まれていますか?

于 2012-10-08T21:07:56.307 に答える