如何在没有bios的指定架构(x86,x64,pic控制器)中获取芯片名称和可寻址内存?你有特定的寄存器存储可用的内存大小吗?
答案 0 :(得分:0)
不确定这是多么相关,但它可能有助于指出正确的方向。
将PicBasic与PicAxe mcu(不是PIC mcu)一起使用,编程语言中有一个名为“READSILICON”的关键字/语句
此READSILICON操作将读取硅的未指定区域并返回一个值,该值反过来用于识别MCU。
所以也许在您的开发IDE中有类似的功能?
注意: 由于这是一个新的功能,只有较新的mcu支持它,显然旧的没有。
答案 1 :(得分:0)
在x86中,可以使用CPUID
指令检索芯片名称; Wikipedia article on CPUID提供了有关如何查询处理器品牌名称字符串的示例代码。
有关CPUID的主要参考,请参阅Intel's App Note,截至本文撰写时,品牌字符串标识为第7.2节。
在GCC内联汇编中,您可以:
unsigned int cpuid = 0x80000000;
__asm__ __volatile__("cpuid\n\t" : "+a" (cpuid));
if (cpuid >= 0x80000004) { // brand name query supported
union { char brandstr[48]; unsigned int i[12] } i;
__asm__ ("cpuid\n\t"
: "=a"(i.i[0]), "=b" (i.i[1]), "=c"(i.i[2]), "=d"(i.i[3])
: "a"(0x80000002));
__asm__ ("cpuid\n\t"
: "=a"(i.i[4]), "=b" (i.i[5]), "=c"(i.i[6]), "=d"(i.i[7])
: "a"(0x80000003));
__asm__ ("cpuid\n\t"
: "=a"(i.i[8]), "=b" (i.i[9]), "=c"(i.i[10]), "=d"(i.i[11])
: "a"(0x80000004));
printf ("This CPU brand name is: %48s\n", i.brandstr);
} else {
printf ("This x86 CPU doesn't support brand name queries\n");
}
在x86机器上确定没有 BIOS的内存布局/尺寸几乎是不可能的,因为直接在硬件上执行此操作的方式非常特定于CPU /芯片组组合以及供应商的开发指南(BKCD - BIOS和内核开发人员指南)通常仅在公共场合(无需NDA)版本中提供部分引用。记录的方法是查询ACPI BIOS以获取此信息。