C++とアセンブラー①

まず、Visual Studiox86C++アセンブリ言語を混在して使用する方法を紹介します。X86ではインラインアセンブラを利用できますので、比較的簡単に記述できますが、C++はもちろん、アセンブリ言語を理解しておくのは前提です。

インラインアセンブリで記述(x86)

Visual Studio の64ビット(x64)はインラインアセンブリを許していません。このため、Visual Studio のメニューで [x86] を選ぶか、[x86 Native Tools Command Prompt for VS 20xx]のコマンドラインでビルドしてください。
本プログラムは、過去記事の
arques.hatenablog.com
インラインアセンブリへ書き換えたようなプログラムです。以降に、C++のソースリストを示します。

#include <iostream>

using namespace std;

int main()
{
    char CPUString[(sizeof(int)) * 3 + 1]{};
    int cpuIdFunNo = 0;

    _asm
    {
        mov eax, cpuIdFunNo
        cpuid
        mov dword ptr [CPUString + 0], ebx
        mov dword ptr [CPUString + 4], edx
        mov dword ptr [CPUString + 8], ecx
        xor al, al
        mov byte ptr [CPUString  + 12], al
    }
    cout << "Vender Id: " << CPUString << endl;
}

実行例:Vender Id: GenuineIntel

コマンドラインでビルド

コマンドライン[x86 Native Tools Command Prompt for VS 20xx]を使って、ビルド・実行した例も示します。

コマンドライン

Visual Studio をインストールするとスタートメニューに [x86 Native Tools Command Prompt Visual Studio 20xx] が追加されますので、それを使用します。メニューから探すのが面倒な時は、Windowsキーを押して、その後「x86 Native … 」と入力すると [x86 Native Tools Command Prompt Visual Studio 20xx] が現れますので、Enterキーを押して起動してください。ほとんどの環境では、「x86」まで入力した時点で現れるでしょう。