48446
Visual Studio2017を使用しています。  
昔作ったx86の32ビット環境で動くプログラムを  
x64で動かせるように移植しているのですが、x86側の一部のプログラムは  
インラインアセンブラ（__asm）を使用しており、VS2017のx64コンパイラでは  
インラインアセンブラが廃止になっているようでした。

そこで、別途*.asmファイル（MASM）を追加して、そこにアセンブリコードを移植しているのですが  
C言語ソース側に定義している外部変数をasmファイル側で参照する方法（記述の仕方）がわかりませんでした。

具体的には以下のようなことがやりたいです。

■C言語ソース

```

    extern void asm_func(void);
    DWORD64 g_dwTest;
    void func()
    {
        // 引数扱い（rcx,rdx,r8,r9...）とはしない事を前提
        g_dwTest = 1;
        asm_func();
    }
    
```

■ASMソース

```

    extern qword g_dwTest    ; みたいなことをやりたい
    
    .code
    asm_func proc
        mov rax, g_dwTest
        ret
    asm_func endp
    end
    
```

私の調べ方が悪いのかMASMの書き方に関する情報が少なくわからなかったので  
わかる方ご教授お願いいたします。
CC BY-SA 4.0
2018-09-16T02:51:29.557
48443
2018-09-16T05:37:24.437
2018-09-16T03:04:47.410
20931
20931
question
c assembly
MASMでのアセンブリでC言語ソースファイルの外部変数を参照する方法（Visual Studio2017）
```

    EXTERN g_dwTest:QWORD
    PUBLIC asm_func
    
    .CODE
    asm_func PROC
        MOV RAX, g_dwTest
        RET
    asm_func ENDP
    END
    
```

でコンパイルできました。

* * *

> MASMの書き方に関する情報が少なく

[Microsoft Macro Assembler Reference](https://docs.microsoft.com/en-
us/cpp/assembler/masm/microsoft-macro-assembler-
reference?view=vs-2017)にディレクティブ等の情報は掲載されていますが、実は32bit版MASMの内容で、64bit版MASMでは使えない機能も多々あり、尚且つ言及されていない点が残念なところです。
CC BY-SA 4.0
2018-09-16T05:37:24.437
48446
2018-09-16T05:37:24.437
4236
48443
answer