Доступ к информации о процессоре в Linux с помощью инструкции cpuid
В этом вопросе разработчик пытается получить доступ к информации о процессоре в среде Linux с помощью метод, аналогичный функции _cpuinfo() в Windows API. Предоставленный код пытается использовать инструкции ассемблера (cpuid) для получения этой информации, но разработчик хочет избежать необходимости ручной сборки.
Решение заключается в использовании заголовочного файла cpuid.h, доступного при компиляции кода с помощью ССЗ. Этот заголовок объявляет две функции:
unsigned int __get_cpuid_max(unsigned int __ext, unsigned int *__sig);
int __get_cpuid(unsigned int __level, unsigned int *__eax, unsigned int *__ebx, unsigned int *__ecx, unsigned int *__edx);
Функция __get_cpuid_max возвращает наибольшее поддерживаемое входное значение для инструкции cpuid. Вы можете указать __ext как 0x0 для базовой информации или 0x8000000 для расширенной информации.
Функция __get_cpuid извлекает информацию о ЦП для указанного уровня и возвращает данные в регистры eax, ebx, ecx и edx. Он возвращает ненулевое значение в случае успеха и ноль, если запрошенный уровень не поддерживается.
Пример использования:
#include
#include
int main() {
unsigned int eax, ebx, ecx, edx;
// Get maximum supported CPUID level
unsigned int max_level = __get_cpuid_max(0x0, NULL);
// Iterate over different CPUID levels
for (unsigned int level = 0; level
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3