ホームに戻る
 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 にビットが立っていれば使用可です。

inserted by FC2 system