x64 用 MASM (ml64.exe)

ml64.exe は、x64 アセンブリ言語対応のアセンブラーです。 ml64.exe コンパイラ オプションについては、「ML および ML64 のコマンド ライン リファレンス」を参照してください。

インライン ASM は x64 ではサポートされていません。 MASM またはコンパイラの組み込み機能 (x64 Intrinsics) を使用してください。

この 2 つの代替手段は、MASM (x64 を完全サポート) とコンパイラの組み込み機能を使用した別々のアセンブリです。 多数の組み込み機能が追加され、密接なプラットフォーム間の連携を実現する、特殊な関数命令 ( 特権、ビット スキャン/テスト、インタロックなど) が利用できるようになりました。

ml64 固有のディレクティブ

ml64.exe では以下のディレクティブを使用します。

また、PROC ディレクティブも ml64.exe 用に更新されました。

32 ビット アドレス モード (アドレス サイズ オーバーライド)

メモリ オペランドに 32 ビット レジスタが含まれている場合、MASM は 0x67 アドレス サイズ オーバーライドを生成します。 たとえば、以下の例では、アドレス サイズ オーバーライドが生成されます。

mov rax, QWORD PTR [ecx]
mov eax, DWORD PTR [ecx*2+r10d]
mov eax, DWORD PTR [ecx*2+r10d+0100h]
prefetch [eax]
movnti rax, QWORD PTR [r8d]

MASM では、32 ビット配置が唯一のメモリ オペランドになっている場合、64 ビット アドレス指定が指定されているものとされます。 現在、このオペランドでの 32 ビット アドレス指定はサポートされていません。

結果、以下のコードで示されているように、1 つのメモリ オペランド内に複数のレジスタ サイズが混在し、エラーが発生します。

mov eax, DWORD PTR [rcx*2+r10d]
mov eax, DWORD PTR [ecx*2+r10+0100h]

参照

その他の技術情報

Microsoft Macro Assembler リファレンス