Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Определение фирмы производителя CPU

Delphi , ОС и Железо , Процессор

Определение фирмы производителя CPU

Автор: Gua
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Определение фирмы производителя CPU

Зависимости: нет
Автор:       Gua, fbsdd@ukr.net, ICQ:1411585495, Simferopol
Copyright:
Дата:        03 мая 2002 г.
***************************************************** }

type
  TVendor = array[0..11] of char;

  .........................

function GetCPUVendor: TVendor; assembler; register;
asm
  PUSH EBX {Save affected register}
  PUSH EDI
  MOV EDI,EAX {@Result (TVendor)}
  MOV EAX,0
  DW $A20F {CPUID Command}
  MOV EAX,EBX
  XCHG EBX,ECX {save ECX result}
  MOV ECX,4
@1:
  STOSB
  SHR EAX,8
  LOOP @1
  MOV EAX,EDX
  MOV ECX,4
@2:
  STOSB
  SHR EAX,8
  LOOP @2
  MOV EAX,EBX
  MOV ECX,4
@3:
  STOSB
  SHR EAX,8
  LOOP @3
  POP EDI {Restore registers}
  POP EBX
end;

Вот перевод текста на русский язык:

Это код программирования Delphi, который определяет функцию GetCPUVendor, которая получает идентификатор производителя процессора (Central Processing Unit). Функция использует инструкцию CPUID архитектуры x86 для получения этой информации.

Вот разбивка кода:

  1. Определен тип TVendor как массив из 12 символов (char) с нижним пределом 0 и верхним пределом 11.
  2. Функция GetCPUVendor объявлена, которая возвращает значение типа TVendor.
  3. Используется директива assembler, чтобы указать, что код должен быть собран в ассемблерном языке.
  4. Директива register указывает, что использованные регистры в этой функции должны сохраняться через вызов функции.
  5. Блок asm содержит фактический код ассемблера для функции.

Код ассемблера выполняет следующие шаги:

  1. Он сохраняет значение регистра EBX, поместив его на стек.
  2. Он перемещает результат команды CPUID в регистр EDI.
  3. Он инициализирует регистр EAX в 0, который будет использоваться как счетчик.
  4. Инструкция $A20F выполняется, отправляя команду CPUID процессору.
  5. Инструкция XCHG EBX, ECX сохраняет результат команды CPUID в регистре ECX и перемещает значение регистра EBX в регистр EAX.
  6. Инструкция MOV EAX, 4 устанавливает регистр EAX в 4, который будет использоваться как счетчик цикла.
  7. Маркер @1: обозначает начало цикла, который повторяется до тех пор, пока значение в регистре EAX не станет 0.
  8. Внутри цикла инструкция STOSB хранит байт из регистра EDI в памяти, а инструкция SHR EAX, 8 сдвигает значение в регистре EAX вправо на 8 бит (т.е., делит его на 256).
  9. Инструкция LOOP @1 повторяет цикл до тех пор, пока значение в регистре EAX не станет 0.
  10. Шаги 7-9 повторяются три раза (маркеры @2: и @3:) для получения идентификатора производителя из различных частей результата CPUID.
  11. Наконец, функция восстанавливает регистры, поместив их с помощью инструкций POP EDI и POP EBX.

Результат в регистре EAX присваивается массиву TVendor, который может быть возвращен как результат функции.

В целом, этот код предоставляет низкоуровневый способ получения информации о идентификаторе производителя процессора, что может быть полезно для системной идентификации или отладки.

Статья определяет функцию GetCPUVendor, которая использует ассемблерный код для определения производителя CPU и возвращает результат в виде строки формата TVendor.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Процессор ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:41:31/0.0037720203399658/0