Команда CPUID - Assembler
Формулировка задачи:
Задали задание найти параметры процессора через команду CPUID, все нашел как я думал,но на процессоре Intel(у меня AMD), стал не правильно выводится кэш первого и третьего уровня,в чем проблема?
Пишу в vs2008 ассемблерными вставками в си.
_asm //Cache1 { mov eax, 0x80000005 cpuid shr ecx, 24 mov CacheLevel1, ecx } _asm //Cache2 { mov eax, 0x80000006 cpuid shr ecx, 16 mov CacheLevel2, ecx } _asm //Cache3 { mov eax, 0x80000006 cpuid shr ecx, 18 mov CacheLevel3, ecx }
Решение задачи: «Команда CPUID»
textual
Листинг программы
#include "stdafx.h" #include <intrin.h> #include <Windows.h> int _tmain(int argc, _TCHAR* argv[]) { DWORD buff[4]; __cpuid((int*)buff,0x80000006); printf("%d \n", buff[2]>>16); return 0; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы.
- Определяется входная переменная командной строки.
- Создается массив для хранения данных, полученных от команды CPUID.
- Выполняется команда CPUID с параметрами, указанными в переменной buff и с индексом 0x80000006.
- Выводится второе байтовое поле (2-й элемент) массива buff, сдвинутый вправо на 16 бит.
- Программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д