Ну, если вы не можете нацелиться на x64
, у вас есть небольшая проблема, потому что вы не используете x64
набор инструментов.Я настоятельно рекомендую вам использовать мастер установки VS, чтобы добавить в x64
инструменты.Вы должны иметь возможность перейти на новую платформу, назвать ее x64
и основать ее на win32
.
Сказав это, я на самом деле рекомендую использовать YASM , поскольку она позволяет интегрироватьс VS, и YASM намного лучше ассемблера, чем Microsoft.
Поскольку у меня есть проект, который все равно выиграет от этого, я подумал, что сделаю это, используя yasm:
gcpuid.asm :
; CPUID on x64-Win32
; Ref:
section .code
global gcpuid
; void cpuid(uint32_t* cpuinfo, char* vendorstr);
gcpuid:
push rbp
mov rbp, rsp
mov r8, rcx ; capture the first and second arguments into 1-> r8, 2-> r9
mov r9, rdx ; cause cpuid will obliterate the lower half of those regs
; retrive the vendor string in its
; three parts
mov eax, 0
cpuid
mov [r9+0], ebx
mov [r9+4], edx
mov [r9+8], ecx
; retrieve the cpu bit string that tells us
; all sorts of juicy things
mov eax, 1
cpuid
mov [r8], eax
mov eax, 0
leave
ret
cpuid-w32.c:
#include <stdio.h>
#include <stdint.h>
void gcpuid(uint32_t* cpuinfo, char* vendorstr);
int main(int argc, char** argv)
{
char vendor[13] = { 0 };
uint32_t flags;
gcpuid(&flags, vendor);
printf("Flags: %u, Vendor: %s\n", flags, vendor);
return 0;
}
После readme.txt в архиве vs2010, представленном на странице загрузки ссылок, было непросто заставить vs собрать это, и я думаю, что это решение намного яснее, чем intels.
Относительно того, что вы делаете с параметром cpuinfo, ну, вы можете попробовать различные маски, чтобы узнать все виды информации о типе процессора.Я мог бы обновить, если я закончу реализацию.