ホームに戻る
CPUID でMMXのチェック
;
; アセンブラ
;
segment .code USE32
global _checkMMX
_checkMMX:
push ebp
mov ebp, esp
pushfd
pop eax
mov edx, eax
xor eax, 0x00200000
push eax
popfd
pushfd
pop eax
cmp eax, edx
jz @1
mov eax, 1
push ebx
push ecx
cpuid
pop ecx
pop ebx
test edx, 0x00800000
jz @1
mov eax, 1
leave
ret
@1:
mov eax, 0
leave
ret
__end__mmx
/*
* C言語
*/
#include <stdio.h>
extern int checkMMX(void);
int main()
{
int result;
result = checkMMX();
if(result == 1){
printf("\n\n%s", "support MMX.");
}
else{
printf("\n\n%s", "not support MMX.");
}
return 0;
}
このプログラムについて
CPUがMMX命令に対応であるかを調べます。
まず CPUID が使用できるか調べるわけですが、
これはフラグレジスタの 0x00200000 を反転できるかで調べます。
反転できれば CPUID が使えます。
次に CPUID を使ってMMX命令が使えるかを調べます。
EAX レジスタに 1 を入れて CPUID を呼んだとき、
EDX レジスタの 0x00800000 にビットが立っていれば使用可です。