0

コマンドラインであるはずのおもちゃの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.

この部分は単独でファイル内で正常に動作するため、コード全体をここに投稿しました。

私は解決策を探しているのではなく、何が起こっているのかについての説明を求めていることに注意してください。

4

1 に答える 1