- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
/**?* file ????: cpuid.c?* author ????: albcamus albcamus@?* usage ????: gcc -m32 cpuid.c -o cpuid?* ???????? ./cpuid?* description ????: a silly program to get the information of your x86 CPU.?* ???????? This program is licensed under GPLv2. No warrant.?* revision ????: 0.1.1 - Fix bugs about changing eflags?* ???????? 0.1 ???? - First release?* TODO ????: revision for AMD/VIA-Cyrix/Transmeta CPUs?*/#include stdio.h#include string.h#include stdlib.henum x86_cpus {????X86_VENDOR_INTEL,????X86_VENDOR_AMD,????X86_VENDOR_CYRIX,????X86_VENDOR_TRANSMETA,????X86_VENDOR_UNKNOWN } x86_vendor;void print_cache_descriptor(unsigned char);int main(void){????unsigned int eflags1, eflags2 = 0;????unsigned int eax, ebx, ecx, edx;????unsigned int serial_num = 0;????eax = ebx = ecx = edx = 0; ????/**???? * 测试CPU是否支持CPUID指令。???? * eflags寄存器的第21位,如果程序可以清除/设置它,则说明CPU支持CPUID指令。否则不支持???? */????/* 先取eflags */????asm volatile (pushf\n\t???????? popl %%eax???????? : =a(eflags1)???????? :???????? : memory ???????? );????printf(original eflags is\t\t: 0x%08x\n, eflags1);????/* 把eflags的第21位取反,写回寄存器中 */????asm volatile (pushl %0\n\t???????????? popf???????????? : ???????????? : g(eflags1 ^ 0???????????? );????/* 检查一下现在的eflags,确认第21位和最初的值相反 */????asm volatile (pushf\n\t???????? popl %%eax???????? : =a(eflags2)???????? :???????? : memory ???????? );????printf(modified eflags is\t\t: 0x%08x\n, eflags2);????/* 如果eflags的值没有发生改变,则说明CPU不支持cpuid指令,程序退出 */????if (eflags1 == eflags2) {????????printf(Sorry, Your CPU dosent support CPUID instruction.\n);????????exit(1);????}????/* 把原来的eflags值设置回去 */????asm volatile (pushl %0\n\t???????? popf???????? :???????? : g(eflags1)???????? );????/**???? * FIXME: Intel文档并没有说,如果不支持CPUID的话,clear/set eflags的第21位会有什么错误。???? * 它只说,在不支持CPUID指令的CPU上,如80386,执行CPUID会产生invalid opcode错误???? *???? * ──我猜测,如果CPUID不被支持,只是程序无法clear/set EFLAGS[21]而已.???? * 所以,在这里我们不处理 读/写 eflags 第21比特失败的情形?
您可能关注的文档
- Web开发培训PPT嘉俊.ppt
- Web前端开发的现状和未来.ppt
- Windows_XP驱动程序编写方法.ppt
- X 射线的危害与防护.ppt
- X、Gama射线的外照射防护.ppt
- XXX担保公司有效沟通讲座.ppt
- XX电力设计咨询有限责任公司战略规划报告.ppt
- XX集团领导力提升培训方案.ppt
- 颌骨缺损修复.pptx
- 贺州“十二五”规划建议.doc
- 高考英语一轮复习课时跟踪检测26 试题解析.doc
- 2024-2030年中国荧光探针行业现状调查与前景方向分析研究报告.docx
- 2024-2030年中国航空装备行业发展现状调研及市场趋势洞察研究报告.docx
- 2024-2030年中国蔗糖行业市场现状供需分析及重点企业投资评估规划分析研究报告.docx
- 2024-2030年中国诊断试剂行业市场深度调研及发展趋势与投资前景预测研究报告.docx
- 2024-2030年中国赛马行业运营规模及发展需求背景分析研究报告.docx
- 2024-2030年中国超声刀行业营销模式与发展前景展望研究研究报告.docx
- 2024-2030年中国通用集成电路行业市场深度调研及投资前与投资策略景研究报告.docx
- 2024-2030年中国酚油行业运行现状与发展前景分析研究报告.docx
- 2024-2030年中国芯片行业市场现状供需分析及重点企业投资评估规划分析研究报告.docx
文档评论(0)