CUPIDはプロセッサの諸元を取り出す命令ですが、386ボードで実行しようとしたら動きません。
調べてみたらCPUIDを正式にサポートしているのはPentium以降、Intel486プロセッサでは
後期のものだけで、386で実行すると無効オペコード例外になってしまうようです。
調べてみたらCPUIDを正式にサポートしているのはPentium以降、Intel486プロセッサでは
後期のものだけで、386で実行すると無効オペコード例外になってしまうようです。
long getid0(unsigned char *buf) { int i; asm("movl $0,%eax"); asm("cpuid"); asm("movl %ebx,_ebx"); asm("movl %edx,_edx"); asm("movl %ecx,_ecx"); asm("movl %eax,_eax"); for(i=0;i<4;i++){ *buf++=(ebx & 0xff); ebx >>= 8; } for(i=0;i<4;i++){ *buf++=(edx & 0xff); edx >>= 8; } for(i=0;i<4;i++){ *buf++=(ecx & 0xff); ecx >>= 8; } *buf++=0; return eax; }
EAXに機能コードをセットしてCPUID命令を実行するとレジスタに値がセットされてきます

EAX=0で実行するとEBX,EDX,ECXにベンダIDストリング「GenuineIntel」がセットされています
このときのEAXの値1は機能番号1までサポートしていることを示します
このときのEAXの値1は機能番号1までサポートしていることを示します
ファミリコード=0100
モデル番号 =0011
ステッピングID=0110
モデル番号 =0011
ステッピングID=0110
より IntelDX2プロセッサ、ステッピング6ということがわかります。
また同時にEDXには機能フラグ0x000Bがセットされていて
これは
これは