我正在使用VS2012 C++ Windows 7,我需要獲取有關CPU多線程的信息來計算可用邏輯處理器的數量。使用VS2012支持__asm__ __volatile__彙編代碼
I'm代碼(從This SO Post)
typedef __int32 int32_t;
typedef unsigned __int32 uint32_t;
uint32_t registers[4];
__asm__ __volatile__ ("cpuid " :
"=a" (registers[0]),
"=b" (registers[1]),
"=c" (registers[2]),
"=d" (registers[3])
: "a" (1), "c" (0));
unsigned CPUFeatureSet = registers[3];
bool hyperthreading = CPUFeatureSet & (1 << 28);
該組件不能編譯,提示以下錯誤:
error C2065: '__asm__' : undeclared identifier
從來就試圖改變以__asm __volatile
並把一切單行爲:
__asm __volatile ("cpuid " : "=a" (registers[0]), "=b" (registers[1]), "=c" (registers[2]), "=d" (registers[3]) : "a" (1), "c" (0));
這也行不通,leadi ng到:
error C2400: inline assembler syntax error in 'opcode'; found '('
幫助讚賞解決這個問題。
這是gcc的語法,它不會在這樣的VS中工作。您需要自行輸入輸出,但如果您沒有可以打電話來獲取此信息的winapi功能,我會感到驚訝。 – Jester
Buf ...我不能寫彙編器...'mov'應該去哪裏? – Mendes
此外,語法完全不同。在MSDN上查找它。 – edmz