相关疑难解决方法(0)

如何在Linux中调用"cpuid"?

在为Windows编写新代码时,我偶然发现_cpuinfo()了Windows API.因为我主要处理Linux环境(GCC),所以我希望能够访问CPUInfo.

我尝试过以下方法:

#include <iostream>

int main()
{
  int a, b;

  for (a = 0; a < 5; a++)
  {
    __asm ( "mov %1, %%eax; "            // a into eax
          "cpuid;"
          "mov %%eax, %0;"             // eax into b
          :"=r"(b)                     // output
          :"r"(a)                      // input
          :"%eax","%ebx","%ecx","%edx" // clobbered register
         );
    std::cout << "The code " << a << " gives " << b << std::endl;
  }

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这使用组件,但我不想重新发明轮子.有没有其他方法可以在没有汇编的情况下实现CPUInfo?

编译器错误:

lewis@lewis-desktop:~/Desktop/prog$ g++ -Wall CPUInfo.cpp
CPUInfo.cpp: In function ‘int …
Run Code Online (Sandbox Code Playgroud)

c++ cpu assembly

7
推荐指数
2
解决办法
1万
查看次数

在汇编中确定32/64位架构

我正在阅读这个问题,并想知道接受的答案是否也可能是确定架构的一种方法.例如,在asm中我可以将WORD推入堆栈然后检查SP.将新SP与旧SP进行比较:

Diff的4表示32位
Diff的8表示64位

我这个想法是否正确?

x86 assembly x86-64 32bit-64bit

6
推荐指数
1
解决办法
1855
查看次数

以编程方式在运行时检测CPU架构

是否可以通过低级代码(C/C++或汇编)检查x86/x86-64 CPU中的CPU架构(64位或32位),而无需从操作系统或某些API收集信息?

可以检查指针的大小,就像这里讨论的那样,但是,根据我的理解,这种方式可以让你知道OS体系结构的编译,因为运行32位操作系统的64位CPU会报告错误的结果.

也许一些cpuid指令或类似可以做到这一点,但我找不到任何完全满足这些要求的东西.如果你认为这是不可能的,我会很高兴有理由证明这一点(这可能是一个不太客观的答案).如果您想知道,这是一个CPU检测软件.

编辑:在装配中确定32/64位体系结构时,OP没有得到解释如何操作的特定答案,只是你应该使用cpuid,并链接到如何在运行时使用GCC检测CPU体系结构类型和内联asm?,这显示了一个很好的答案,但它没有我标记为接受的答案那么完整,因为Remy Lebeau给出了详细的解释,并告诉必须查询哪个特定的cpuid位,而不是仅仅编写一些代码,以及我发现它对我的问题更合适,因为它是在更高级别的范围内解释的(我从未提及gcc,第二篇文章的确如此)

c c++ assembly cpu-architecture

0
推荐指数
2
解决办法
850
查看次数

标签 统计

assembly ×3

c++ ×2

32bit-64bit ×1

c ×1

cpu ×1

cpu-architecture ×1

x86 ×1

x86-64 ×1