CPUID命令を使用して、私のOSにCPUに関する情報を印刷しています。CPUIDのブランド文字列が壊れていますか?
ベンダー文字列(GenuineIntel)を読むことと印刷することはうまくいきますが、ブランド文字列を読むことで少し変わった文字列ができます。
ok cpu-info <= Run command
CPU Vendor name: GenuineIntel <= Vendor string is good
CPU Brand: D: l(R) Core(TMD: CPU MD: <= What..?
ok
ことになっベンダー文字列:
Intel(R) Core(TM) i5 CPU M 540
しかし、私が得たことは次のとおりです。
D: l(R) Core(TMD: CPU MD:
C++コード:
char vendorString[13] = { 0, };
Dword eax, ebx, ecx, edx;
ACpuid(0, &eax, &ebx, &ecx, &edx);
*((Dword*)vendorString) = ebx;
*((Dword*)vendorString + 1) = edx;
*((Dword*)vendorString + 2) = ecx;
Console::Output.Write(L"CPU vendor name: ");
for (int i = 0; i < 13; i++) {
Console::Output.Write((wchar_t)(vendorString[i]));
}
Console::Output.WriteLine();
char brandString[48] = { 0, };
ACpuid(0x80000002, &eax, &ebx, &ecx, &edx);
*((Dword*)brandString) = eax;
*((Dword*)brandString + 1) = ebx;
*((Dword*)brandString + 2) = ecx;
*((Dword*)brandString + 3) = edx;
ACpuid(0x80000003, &eax, &ebx, &ecx, &edx);
*((Dword*)brandString + 4) = eax;
*((Dword*)brandString + 5) = ebx;
*((Dword*)brandString + 6) = ecx;
*((Dword*)brandString + 7) = edx;
ACpuid(0x80000004, &eax, &ebx, &ecx, &edx);
*((Dword*)brandString + 8) = eax;
*((Dword*)brandString + 9) = ebx;
*((Dword*)brandString + 10) = ecx;
*((Dword*)brandString + 11) = edx;
Console::Output.Write(L"CPU brand: ");
for (int i = 0; i < 48; i++) {
Console::Output.Write((wchar_t) brandString[i]);
}
Console::Output.WriteLine();
は注:
このプログラムはUEFIアプリケーションです。権限に問題はありません。
コンソールは、EFIコンソール用のラッパークラスです。 C#のものではありません。
のDWORD =符号なし32ビット整数
アセンブリコード(MASM):
;Cpuid command
;ACpuid(Type, pEax, pEbx, pEcx, pEdx)
ACpuid Proc
;Type => Rcx
;pEax => Rdx
;pEbx => R8
;pEcx => R9
;pEdx => [ rbp + 48 ] ?
push rbp
mov rbp, rsp
push rax
push rsi
mov rax, rcx
cpuid
mov [ rdx ], eax
mov [ r8 ], ebx
mov [ r9 ], ecx
mov rsi, [ rbp + 48 ]
mov [ rsi ], rdx
pop rsi
pop rax
pop rbp
ret
ACpuid Endp
愚かな質問:私たちは
ACpuid
ルーチンをこのようにコーディングすることができ念頭に置いて、上記のすべてと。あなたのプログラムは完全な権限を持っていますか? – Auriga
C++またはC#を意味しますか? –
@MichaelPetch C++。コンソールはEFIコンソールのネームスペースです(コンソール::出力はコンソール出力です)。C#のコンソールクラスではありません。 – Gippeumi