Команда 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;
}

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы.
  2. Определяется входная переменная командной строки.
  3. Создается массив для хранения данных, полученных от команды CPUID.
  4. Выполняется команда CPUID с параметрами, указанными в переменной buff и с индексом 0x80000006.
  5. Выводится второе байтовое поле (2-й элемент) массива buff, сдвинутый вправо на 16 бит.
  6. Программа завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.333 из 5
Похожие ответы