コマンドラインであるはずのおもちゃのOSを書いています。機能に CPUID を追加しようとしましたが、CPUID を連続して呼び出すと、奇妙な結果が得80000002h
られ80000003h
ます80000004h
。他の順序で呼び出すと、正常に動作します。
連続注文
別の注文:
これは、コードの問題のある部分です。
prcpuinf:
push dx
mov eax, 80000002h
cpuid
mov [es:cpuinfo+0], eax
mov [es:cpuinfo+4], ebx
mov [es:cpuinfo+8], ecx
mov [es:cpuinfo+12], edx
mov eax, 80000003h
cpuid
mov [es:cpuinfo+16], eax
mov [es:cpuinfo+20], ebx
mov [es:cpuinfo+24], ecx
mov [es:cpuinfo+28], edx
mov eax, 80000004h
cpuid
; jmp prnt
mov [es:cpuinfo+32], eax
mov [es:cpuinfo+36], ebx
mov [es:cpuinfo+40], ecx
mov [es:cpuinfo+44], edx
nop
prnt:
mov ah, 13h
mov ecx, 48;cpulen
mov bh, 0
mov bl, 0x07
mov dh, 3
mov dl, 3
mov bp, cpuinfo
int 10h
pop dx
mov ecx, 1
ret
CPU ブランド文字列の最後の部分をコピーしない場合でも、コードはこのように動作します。つまり、`jmp prnt.
この部分は単独でファイル内で正常に動作するため、コード全体をここに投稿しました。
私は解決策を探しているのではなく、何が起こっているのかについての説明を求めていることに注意してください。