【问题标题】:How to interpret System-On-Chip cpu vendor string?如何解释片上系统 CPU 供应商字符串?
【发布时间】: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 供应商字符串?

【问题讨论】:

    标签: assembly x86 x86-64 cpuid


    【解决方案1】:

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

    【讨论】:

    • 没错。在我的 CPU 上,最大值原来是 0x16
    猜你喜欢
    • 2016-06-24
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    相关资源
    最近更新 更多