CPUID得到的数据会变化?

jamesking 2006-11-21 06:28:20
我的软件里用到了CPUID生成序列号,可是最近有用户反应,他的序列号不断的变化,我给的注册码没法用。
我以前在Intel和AMD的单核处理器上测试过是不会变化的。但他的电脑是至强处理器。
我想问一下,在至强处理器或双核处理器上用CPUID指令是否会变化?
下面是我的代码:
push ebx
push ecx
push edx
mov eax, 1
cpuid
mov IDAX, eax
mov IDBX, ebx
mov IDCX, ecx
mov IDDX, edx
pop edx
pop ecx
pop ebx

请问我取到的IDAX、IDBX、IDCX、IDDX会发生变化吗?
...全文
670 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Qinlove 2006-11-28
  • 打赏
  • 举报
回复
估计是双核的问题导致的。我也遇到了类似的问题,用RDTSC反复读CPU计数器,在双核CPU上,一会儿读出来的是这个核的,一会儿又是那个核的,不知道怎么控制
  • 打赏
  • 举报
回复
在较早的处理器中,PentiumIII及更早的型号,也包括一部分PentiumIV,
EAX = 1,CPUID指令返回的结果中,只有EAX和EDX是定义的,EBX和ECX没有使用。但是Intel更新过的文档25366621中CPUID的说明中没有提及这一点。
所以你应该:
push ebx
push ecx
push edx
mov eax, 1
xor ebx,ebx ;
xor ecx,ecx ; 或者预置为其他固定的值
cpuid
mov IDAX, eax
mov IDBX, ebx
mov IDCX, ecx
mov IDDX, edx
pop edx
pop ecx
pop ebx
火雲邪神 2006-11-21
  • 打赏
  • 举报
回复
i *guess*, it won't change
大熊猫侯佩 2006-11-21
  • 打赏
  • 举报
回复
Table 3-13. Highest CPUID Source Operand for IA-32 Processors
IA-32 Processors
Highest Value in EAX
Basic Information Extended Function Information
Earlier Intel486 Processors CPUID Not Implemented CPUID Not Implemented
Later Intel486 Processors and
Pentium Processors
01H Not Implemented
Pentium Pro and Pentium II
Processors, Intel® Celeron®
Processors
02H Not Implemented
Pentium III Processors 03H Not Implemented
Pentium 4 Processors 02H 80000004H
Intel Xeon Processors 02H 80000004H
Pentium M Processor 02H 80000004H
Pentium 4 Processor supporting
Hyper-Threading Technology
05H 80000008H
Pentium D Processor (8xx) 05H 80000008H
Pentium D Processor (9xx) 06H 80000008H
Intel Core Duo Processor 0AH 80000008H

详细内容请参考 Instruction Set Reference
jamesking 2006-11-21
  • 打赏
  • 举报
回复
如果会发生变化,我该怎么做才能让CPUID指令不会变化,少取几个参数也没关系。比如IDCX、IDDX会变化,我就只取IDAX、IDBX。请给点建议,谢谢!

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧