我正在编写一个玩具操作系统,它应该是一个命令行。我尝试将 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.
因为这部分本身在文件中正常工作,所以我在这里发布了我的整个代码。
请注意,我不是在寻找解决方案,而是在寻找对正在发生的事情的解释。