免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2927 | 回复: 2
打印 上一主题 下一主题

[C] Linux下通过C内联汇编实现cpuid的疑问 [复制链接]

论坛徽章:
11
摩羯座
日期:2013-09-29 17:39:09白羊座
日期:2014-11-13 09:38:14技术图书徽章
日期:2014-01-17 15:07:36狮子座
日期:2013-12-25 14:01:52技术图书徽章
日期:2013-12-17 11:33:22技术图书徽章
日期:2013-12-03 10:27:57天秤座
日期:2013-11-08 15:47:19申猴
日期:2013-10-29 13:16:32未羊
日期:2013-10-12 22:28:56辰龙
日期:2013-10-09 14:39:5515-16赛季CBA联赛之山东
日期:2016-07-25 10:23:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-05-20 18:12 |只看该作者 |倒序浏览
如题,在Linux下通过C内联汇编调用cpuid指令,获取处理器厂商vendor id
  1. #include <stdio.h>

  2. static void native_cpuid(unsigned int *eax, unsigned int *ebx,
  3.         unsigned int *ecx, unsigned int *edx)
  4. {
  5.     /* ecx is often an input as well as an output. */
  6.     asm volatile("cpuid"
  7.             : "=a" (*eax),
  8.             "=b" (*ebx),
  9.             "=c" (*ecx),
  10.             "=d" (*edx)
  11.             : "0" (*eax), "2" (*ecx));
  12. }

  13. int main(int argc, char *argv[])
  14. {
  15.     unsigned eax, ebx, ecx, edx;

  16.     eax = 0; /* processor info and feature bits */
  17.     native_cpuid(&eax, &ebx, &ecx, &edx);

  18.     printf("%s\n", &ebx);
  19.     printf("%s\n", &edx);
  20.     printf("%s\n", &ecx);

  21.     return 0;
  22. }
复制代码
按照intel官方文档的说法,eax=0时,ebx, edx, ecx中应该依次保存Genu,ineI,ntel

编译运行,结果为
  1. Genu
  2. ineIntelGenu
  3. ntelGenu
复制代码
此处不解,请各位指点一下,谢谢。

论坛徽章:
0
2 [报告]
发表于 2015-05-20 23:55 |只看该作者
字符串没有以0结尾

第二行已经把d、c、b全部打印出来了,内容正确。

论坛徽章:
11
摩羯座
日期:2013-09-29 17:39:09白羊座
日期:2014-11-13 09:38:14技术图书徽章
日期:2014-01-17 15:07:36狮子座
日期:2013-12-25 14:01:52技术图书徽章
日期:2013-12-17 11:33:22技术图书徽章
日期:2013-12-03 10:27:57天秤座
日期:2013-11-08 15:47:19申猴
日期:2013-10-29 13:16:32未羊
日期:2013-10-12 22:28:56辰龙
日期:2013-10-09 14:39:5515-16赛季CBA联赛之山东
日期:2016-07-25 10:23:00
3 [报告]
发表于 2015-05-24 02:38 |只看该作者
回复 2# sonicling
多谢,已解决。

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP