Visual Studioでasmファイルを使う

x64ではインラインアセンブラが使えないので生のMASMを書く必要がある。

  1. asmファイルをプロジェクト内に追加する
  2. 追加したasmファイルのプロパティを開き、「カスタム ビルド ステップ」>「全般」の
    • コマンドライン」に ml64 /c /Cx /W0 /Fo$(IntDir)\$(InputName).obj "$(InputPath)"
    • 「出力ファイル」に $(IntDir)\$(InputName).obj
  3. 普通にビルド
  4. (゚Д゚)ウマー


ちなみにドライバ開発をやっているときは、

  1. プロジェクトのソースコードがあるディレクトリ内に
  2. SOURCESファイルの
    • I386_SOURCESにx86用asmファイル名を指定する
    • AMD64_SOURCESにx64用asmファイル名を指定する
  3. 普通にbuild
  4. (゚Д゚)ウマー

以下は例。

#
# SOURCES (for driver development)
#

#...
SOURCES=test.cpp     
I386_SOURCES=test.asm    
AMD64_SOURCES=test.asm    
;
; test.asm for x64 
;

; pushad
PUSHAD_AMD64 MACRO
        push r15
        push r14
        push r13
        push r12
        push r11
        push r10
        push r9
        push r8
        push rdi
        push rsi
        push rbp
        push rbp        ; rsp
        push rbx
        push rdx
        push rcx
        push rax
ENDM

; popad
POPAD_AMD64 MACRO
        pop rax
        pop rcx
        pop rdx
        pop rbx
        pop rbp         ; rsp
        pop rbp
        pop rsi
        pop rdi
        pop r8
        pop r9
        pop r10
        pop r11
        pop r12
        pop r13
        pop r14
        pop r15
ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.CODE

; void RoutineName(void);
RoutineName PROC
        PUSHAD_AMD64            
        POPAD_AMD64          
        ret
RoutineName ENDP

END
//
// test.cpp
//
extern "C" void RoutineName(void);

// ...
  RoutineName();


ちなみに x86 なら ml64 ではなくて ml になる。