CPUのベンダー名を読み出し、それを表示してみましょう。
arques.hatenablog.com
のアゼンブラーバージョンです。
C++ソースリスト
#include <iostream> using namespace std; extern "C" void myCpuid(char*); // assembler function int main() { char CPUString[(sizeof(int)) * 3 + 1]{}; CPUString[sizeof CPUString - 1] = '\0'; myCpuid(CPUString); cout << "Vender Id: " << CPUString << endl; }
アセンブリ関数ソースリスト
__cpuidイントリンシックを、アセンブリ言語の関数で実装します。関数名はmyCpuidです。基本的にmyCpuidは__cpuidイントリンシックと互換があります。
include ksamd64.inc _TEXT segment ; ; rcx = stringの先頭アドレス。 ; rdx = function # ; public myCpuid align 16 myCpuid proc frame ; prologを使う時はproc frame ; prolog rex_push_reg rbx ; マクロでrbxをpush .endprolog ; end of prolog mov r9, rcx ; addr xor eax, eax cpuid mov [r9+0], ebx mov [r9+4], edx mov [r9+8], ecx ; epilog pop rbx ; restore ret myCpuid endp _TEXT ends end