首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解释片上系统cpu供应商字符串?

如何解释片上系统cpu供应商字符串?
EN

Stack Overflow用户
提问于 2019-09-10 05:28:25
回答 1查看 162关注 0票数 1

英特尔手册定义了cpuid0x17负责cpu供应商字符串。输出取决于ecx中的值。因此,根据注释:

叶片17H输出取决于ECX中的初始值。SOC供应商品牌字符串是一个UTF-8编码的字符串,由00H.The的尾随字节填充,完整的SOC供应商字符串是通过EAX:EBX:ECX:EDX的升序连接和从亚叶1片段到亚叶3的连接来构造的。

我编写了以下程序集,并期望得到一些合理的字符串:

代码语言:javascript
复制
;Set the System-On-Chip value to eax
mov eax, 0x17

;Set the first subleaf in ecx
mov ecx, 0x01

cpuid

cpuid指令的结果如下:

代码语言:javascript
复制
(gdb) p/x $eax
$8 = 0x7d0
(gdb) p/x $ebx
$9 = 0xfa0
(gdb) p/x $ecx
$10 = 0x64
(gdb) p/x $edx
$11 = 0x0

简单地连接寄存器内容(丢弃尾随的0x00字节)不会产生可读的结果:

代码语言:javascript
复制
$1 = 0x7fffffffdea0 "d\240\017\320\a"

问题:如何解释SOC供应商字符串?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-10 06:26:54

您的处理器不支持cpuid叶子0x17。使用cpuid叶0查找最大支持的cpuid叶(在eax中返回)。例如,在我的系统中,最大的cpuid叶是0x0f。当使用cpuid时,叶值大于最大支持值时,处理器将返回最大支持值的结果,这就是为什么要获得看起来是垃圾值的结果。(如果您尝试cpuidlev0x16,您将看到得到与0x17完全相同的返回值。)

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

https://stackoverflow.com/questions/57864505

复制
相关文章

相似问题

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