|
-- CPUID.ASM -------------------------------
;PUBLIC AsmCPUID
.code
EXTERN asmOP:DWORD
EXTERN asmEAX:DWORD
EXTERN asmEBX:DWORD
EXTERN asmECX:DWORD
EXTERN asmEDX:DWORD
AsmCPUID PROC
mov eax,asmOP
cpuid
mov asmEAX,eax
mov asmEBX,ebx
mov asmECX,ecx
mov asmEDX,edx
ret 0
AsmCPUID ENDP
end
-- main.cpp --
extern "C" {
int AsmCPUID();
unsigned int asmOP;
unsigned int asmEAX;
unsigned int asmEBX;
unsigned int asmECX;
unsigned int asmEDX;
}
int main()
{
asmOP = 0;
AsmCPUID();
printf("CPUID:%08X EAX:%08X EBX:%08X ECX:%08X EDX:%08X\n",asmOP,asmEAX,asmEBX,asmECX,asmEDX);
asmOP = 1;
AsmCPUID();
printf("CPUID:%08X EAX:%08X EBX:%08X ECX:%08X EDX:%08X\n",asmOP,asmEAX,asmEBX,asmECX,asmEDX);
...
って感じです。絶対変だとは思うんですが、グローバル変数渡し以外にやり方がわからなかったので。まぁ、20バイトくらいいいですよね(^_^;
もう一段レイヤーを用意すれば既存の Win32 と完全互換が保てそうです。
|
|