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

Posted

技术标签:

【中文标题】如何解释片上系统 CPU 供应商字符串?【英文标题】:How to interpret System-On-Chip cpu vendor string? 【发布时间】:2019-09-10 05:28:25 【问题描述】:

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

叶 17H 输出取决于 ECX 中的初始值。 SOC 供应商 Brand String 是一个 UTF-8 编码的字符串,用尾随字节填充 00H.完整的 SOC Vendor Brand String 由 以EAX:EBX:ECX:EDX 的升序连接并从 子叶 1 片段朝向子叶 3。

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

;Set the System-On-Chip value to eax
mov eax, 0x17

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

cpuid

cpuid 指令的结果如下:

(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 字节)不会产生可读的内容:

$1 = 0x7fffffffdea0 "d\240\017\320\a"

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

没错。在我的 CPU 上,最大值原来是 0x16

以上是关于如何解释片上系统 CPU 供应商字符串?的主要内容,如果未能解决你的问题,请参考以下文章

srm系统如何降低供应商风险

srm系统如何降低供应商风险

记一次 .NET 某供应链WEB网站 CPU 爆高事故分析

对公信贷对接供应链系统

在 Raspberry Pi 4B 上获取 CPU 供应商 ID,例如 x86 CPUID?

CPU缓存体系对Go程序的影响