首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CPUID输出取决于操作顺序

CPUID输出取决于操作顺序
EN

Stack Overflow用户
提问于 2013-09-28 23:55:27
回答 1查看 158关注 0票数 0

我正在编写一个玩具操作系统,它应该是一个命令行。我尝试将CPUID添加到我的功能中,当我按顺序调用CPUID (即80000002h80000003h80000004h )时,会得到奇怪的结果。如果我按其他顺序称呼它,它就能正常工作。

连续顺序

另一项命令:

这是代码中冒犯的部分。

代码语言:javascript
复制
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时,代码也是这样运行的。

因为这个部分通常在一个文件中正常工作,所以我已经发布了我的整个代码这里

请注意,我不是在寻找解决方案,而是想要对正在发生的事情作出解释。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-29 10:21:53

简短的回答:总是完全指定AX

让我们看看这段代码:

代码语言:javascript
复制
mov ah, 13h
mov ecx, 48;cpulen
mov bh, 0
mov bl, 0x07
mov dh, 3
mov dl, 3
mov bp, cpuinfo
int 10h

您定义了AHBXCXDXBP。您没有定义AL,它也是INT 10h接口的一部分。对于AH=13hAL指定子服务,如这个问题中所述

  • AL=0hBP是一个字符串,BL指定属性,不要更新游标
  • AL=1hBP是一个字符串,BL指定属性,更新游标
  • AL=2hBP是字符-属性对的字符串,不要更新游标。
  • AL=3hBP是字符-属性对的字符串,更新游标

我认为实际的实现只需查看AL中最不重要的部分,并决定要做什么。特别地,在您的情况下,每当设置AL的第1位时,您就会看到乱码文本,但是当它被重置时,您将看到普通文本。

因此,无论您看到的是乱码还是普通文本,都取决于对CPUID的最后一次调用写到了AL的第1位。这正是它取决于呼叫顺序的原因。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19072948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档