118

Визначення найменування і тактової частоти процесора

Лабораторная работа

Информатика, кибернетика и программирование

Дана лабораторна робота написана на мові Delphi 7 на тему Визначення найменування і тактової частоти процесора. Зміст роботи: Постановка задачі. Теоретичні відомості. Опис алгоритму. Керівництво програмісту. Керівництво користувачеві. Приклад роботи програми. Програмний код програми. Висновок про виконану роботу. Використана література, або інші джерела.

Украинкский

2012-11-14

632 KB

14 чел.

Зміст

  1.  Постановка задачі.
  2.  Теоретичні відомості.
  3.  Опис алгоритму.
  4.  Керівництво програмісту.
  5.  Керівництво користувачеві.
  6.  Приклад роботи програми.
  7.  Програмний код програми.
  8.  Висновок про виконану роботу.
  9.  Використана література, або інші джерела.

  1.  Постановка задачі:

11 питання зі списка лабораторних робіт по МЗКІТ -

« Визначення найменування і тактової частоти процесора ».

  1.  Теоретичні відомості.

Центральний процесор (Central processing unit) — функціональна частина ЕОМ, що призначена для інтерпретації команд.

 Функції:

  •  обробка даних по заданій програмі шляхом виконання арифметичних і логічних операцій;
  •  програмне керування роботою пристроїв комп'ютера.

Архітектура процесора

Термін "архітектура процесора" в даний час не має однозначного тлумачення. З погляду програмістів, під архітектурою процесора мається на увазі його здатність виконувати певний набір машинних кодів. Більшість сучасних десктопних процесорів відносяться до сімейства x86, або Intel-сумісних процесорів архітектури IA32 (архітектура 32-бітових процесорів Intel). Її основа була закладена компанією Intel в процесорі i80386, проте в подальших поколіннях процесорів вона була доповнена і розширена як самою Intel (введені нові набори команд MMX, SSE, SSE2 і SSE3), так і сторонніми виробниками (набори команд EMMX, 3DNow! і Extended 3DNow!, розроблені компанією AMD).

Проте розробники комп'ютерного устаткування вкладають в поняття "Архітектура процесора" (іноді, щоб остаточно не заплутатися, використовується термін "мікроархітектура") дещо інший зміст. З їхнього погляду, архітектура процесора відображає основні принципи внутрішньої організації конкретних сімейств процесорів. Наприклад, архітектура процесорів Intel Pentium позначалася як Р5, процесорів Pentium II і Pentium III - Р6, а популярні в недавньому минулому Pentium 4 відносилися до архітектури NetBurst. Після того, як компанія Intel закрила архітектуру Р5 для сторонніх виробників, її основний конкурент - компанія AMD була вимушена розробити власну архітектуру - К7 для процесорів Athlon і Athlon XP, і К8 для Athlon 64.

Ядро:

В рамках однієї і тієї ж архітектури різні процесори можуть досить сильно відрізнятися один від одного. І відмінності ці утілюються в різноманітних процесорних ядрах, що володіють певним набором строго обумовлених характеристик. Найчастіше ці відмінності втілюються в різних частотах системної шини (FSB), розмірах кеша другого рівня, підтримці тих або інших нових систем команд або технологічних процесах, за якими виготовляються процесори. Нерідко зміна ядра в одному і тому ж сімействі процесорів спричиняє за собою заміну процесорного розніму (сокет, англ. socket), з чого витікають питання подальшої сумісності материнських плат. Проте в процесі вдосконалення ядра, виробникам доводиться вносити до нього незначні зміни, які не можуть претендувати на "ім'я власне". Такі зміни називаються ревізіями (англ. stepping) ядра і, найчастіше, позначаються цифробуквеннимі комбінаціями. Проте в нових ревізіях одного і того ж ядра можуть зустрічатися досить помітні нововведення. Так, компанія Intel ввела підтримку 64-бітової архітектури EM64T в окремі процесори сімейства Pentium 4 саме в процесі зміни ревізії.

32-бітові та 64-бітові процесори

Найуспішнішими і найпоширенішими донедавна були процесори з архітектурою IA32, яка була введена з появою покоління процесорів i80386 на заміну 16-бітним 8086, 80186, 80286.

Досить вдале 64-бітове розширення класичної 32-бітової архітектури IA32 було запропоноване в 2002 році компанією AMD (спочатку називалося x86-64, зараз - AMD64) в процесорах сімейства К8. Через деякий час компанією Intel було запропоновано власне позначення - EM64T (англ. Extended Memory 64-bit Technology). Але, незалежно від назви, суть нової архітектури одна і та ж: розрядність основних внутрішніх регістрів 64-бітових процесорів подвоїлася (з 32 до 64 біт), а 32-бітові команди x86-кода отримали 64-бітові аналоги. Крім того, за рахунок розширення розрядності шини адрес об'єм пам'яті, що адресується процесором, істотно збільшився.

Але ті, хто чекає від 64-бітових процесорів скільки-небудь істотного приросту швидкодії, будуть розчаровані — їхня продуктивність в переважній більшості сучасних застосунків (які в масі своєю заточені під IA32) практично та ж, що і у старих добрих 32-бітових процесорів. Для пересічного користувача потенціал 64-бітової архітектури може розкритися, коли в масово з'являться застосунки, оптимізовані під нову архітектуру. Найефективніший перехід на 64-бітові процесори буде для програм, що активно працюють з великими об'ємами пам'яті, понад 4 ГБ: продуктивними серверами, базами даних, програм класу CAD/CAE, а також програм для роботи з цифровим контентом.

Багатоядерні процесори

Найзначнішою подією 2005 року стала поява дво'ядерних процесорів. До того часу класичні одноядерні CPU певною мірою вичерпали резерви зростання продуктивності за рахунок підвищення робочої частоти. Каменем спотикання стало не тільки дуже високе тепловиділення процесорів, що працюють на високих частотах, але і проблеми з їхньою стабільністю. Отже екстенсивний шлях розвитку процесорів вичерпався, і виробникам довелося освоювати новий, інтенсивний шлях підвищення продуктивності продукції. Піонером на ринку десктопних CPU, як зазвичай, стала компанія Intel, що першою анонсувала дво'ядерні процесори Intel Pentium D і Intel Extreme Edition. Втім, AMD з Athlon64 X2 відстала від конкурента буквально на лічені дні. Безперечним добутком цих дво'ядерників першого покоління є їхня повна сумісність з існуючими системними платами. Друге покоління двоядерних процесорів, зокрема, Intel Core 2 Duo, вимагає спеціально розроблених для них чіпсетів і зі старими материнськими платами не працює.

На сьогоднішній день для роботи з двоядернимі процесорами більш менш оптимізовано в основному професійне ПЗ (включаючи роботу з графікою, аудіо- і відео-даними), тоді як для офісного або домашнього користувача друге процесорне ядро іноді приносить користь, але частіше є мертвим вантажем. Але ринок неухильно рухається у бік мультиядерних систем і оптимізованих паралельних обчислень. Така тенденція буде пануючою найближчими роками, так що частка ПЗ, оптимізованого під декілька ядер, неухильно зростатиме, і дуже скоро може наступити момент, коли багатоядерність стане насущною необхідністю.

Будова

Внутрішні спільно працюючі пристрої

Моделі процесорів включають наступні спільно працюючі пристрої:

  •  Пристрій керування (ПК). Здійснює координацію роботи всіх інших пристроїв, виконує функції керування пристроями, керує обчисленнями в комп'ютері.
  •  Арифметико-логічний пристрій (АЛП). Так називається пристрій для цілочислових операцій. Арифметичні операції, такі як додавання, множення і ділення, а також логічні операції (OR, AND, ASL, ROL і ін.) обробляються за допомогою АЛП. Ці операції складають переважну більшість програмних кодів у більшості програм. Всі операції в АЛП виробляються в регістрах — спеціально відведених комірках АЛП. У процесорі може бути декілька АЛП. Кожен здатний виконувати арифметичні або логічні операції незалежно від інших, що дозволяє виконувати кілька операцій одночасно. Арифметико-логічний пристрій виконує арифметичні і логічні дії. Логічні операції поділяються на дві прості операції: «Так» і «Ні» («1» і «0»). Звичайно ці два пристрої виділяються чисто умовно, конструктивно вони не розділені.
  •  AGU (Address Generation Unit) — пристрій генерації адрес. Це пристрій не менш важливий, ніж АЛП, тому що він відповідає за коректну адресацію при завантаженні або збереженні даних.
  •  Математичний співпроцесор (FPU). Процесор може містити кілька математичних співпроцесорів. Кожний з них здатний виконувати, щонайменше, одну операцію з плаваючою крапкою, незалежно від того, що роблять інші АЛП. Метод конвеєрної обробки даних дозволяє одному математичному співпроцесорові виконувати кілька операцій одночасно. Співпроцесор підтримує високоточні обчислення як цілочисельні, так і з плаваючою крапкою, і, крім того, містить набір корисних констант, що прискорюють обчислення. Співпроцесор працює паралельно з центральним процесором, забезпечуючи, таким чином, високу продуктивність.
  •  Дешифратор інструкцій (команд). Аналізує інструкції з метою виділення операндів і адрес, по яких розміщаються результати. Потім випливає повідомлення іншому незалежному пристроєві про те, що необхідно зробити для виконання інструкції. Дешифратор допускає виконання декількох інструкцій одночасно для завантаження усіх виконуючих пристроїв.

Пам'ять

  •  Кеш-пам'ять. Особлива високошвидкісна пам'ять процесора. Кеш використовується як буфер для прискорення обміну даними між процесором і оперативною пам'яттю, а також для збереження копій інструкцій і даних, що недавно використовувалися процесором. Значення з кеш-пам'яті витягаються прямо, без звертання до основної пам'яті.

Кеш першого рівня (L1 cache). Кеш-пам'ять, що знаходиться усередині процесора. Вона швидше всіх інших типів пам'яті, але менше за обсягом. Зберігає зовсім недавно використану інформацію, що може бути використана при виконанні коротких програмних циклів.

Кеш другого рівня (L2 cache). Також знаходиться усередині процесора. Інформація, що зберігається в ній, використовується рідше, ніж інформація, що зберігається в кеш-пам'яті першого рівня, проте за обсягом пам'яті він більший. Також у даний час у процесорах використовується кеш третього рівня.

  •  Основна пам'ять. Набагато більша за обсягом, чим кеш-пам'ять, і значно менш швидкодіюча.
  •  Регістри — це внутрішня пам'ять процесора. Являють собою ряд спеціалізованих додаткових комірок пам'яті, а також внутрішні носії інформації мікропроцесора. Регістр є пристроєм тимчасового збереження даних, числа або команди і використовується з метою полегшення арифметичних, логічних і пересильних операцій. Основним елементом регістра є електронна схема, називана тригером, що здатна зберігати одну двійкову цифру (розряд).

Деякі важливі регістри мають свої назви, наприклад: суматор — регістр АЛП, що бере участь у виконанні кожної операції. лічильник команд — регістр УП, зміст якого відповідає адресі чергової виконуваної команди; служить для автоматичної вибірки програми з послідовних комірок пам'яті. регістр команд — регістр УП для збереження коду команди на період часу, необхідний для її виконання. Частина його розрядів використовується для збереження коду операції, інші — для збереження кодів адрес операндів.

Шини

Шина — це канал пересилання даних, який використовується спільно різними блоками системи. Шина може являти собою набір провідних ліній у друкованій платі, проводу, припаяні до виводів роз'ємів, у які вставляються друковані плати, або плоский кабель. Інформація передається по шині у виді груп бітів. До складу шини для кожного біта слова може бути передбачена окрема лінія (паралельна шина), або всі біти слова можуть послідовно в часі використовувати одну лінію (послідовна шина).

  •  Шина даних. Служить для пересилання даних між процесором і пам'яттю або процесором і пристроями введення-виведення. Ці дані можуть являти собою як команди мікропроцесора, так і інформацію, що він посилає в порти введення-виведення або приймає звідти.
  •  Шина адрес. Використовується ЦП для вибору необхідної комірки пам'яті або пристрою введення-виведення шляхом установки на шині конкретної адреси, що відповідає одній з комірок пам'яті або одному з елементів введення-виведення, що входять у систему.
  •  Шина керування. По ній передаються керуючі сигнали, призначені пам'яті і пристроям введення-виведення. Ці сигнали вказують напрямок передачі даних (у процесор або з нього).

Буфер цілей розгалуження

BTB(Branch Target Buffer). Це таблиця в якій знаходяться всі адреси, куди буде або може бути зроблений перехід.

3. Опис алгоритму.

Алгоритм function GetCPUCount

Алгоритм function GetCPUVendor

Алгоритм function GetCPUSpeed

procedure TForm1.FormActivate

procedure TForm1.Button1Click

procedure TForm1.Button2Click

procedure TForm1.Button3Click

4. Керівництво програмісту.

Програма складається с таких компонентів:

   TForm1 = class(TForm)             -  головна форма, де розташовані компоненти.

   Button1: TButton;                     - кнопка отримання інформації про ЦПУ.

   Button2: TButton;                      - кнопка очищення компонентів Label1-Label10.

   Button3: TButton;                      - кнопка виходу з програми.

   Label1: TLabel;                          - мітка для виводу виробника ЦПУ.

   Label2: TLabel;                          - мітка для виводу кількості ЦПУ.

   Label3: TLabel;                          - мітка для виводу назви ЦПУ.

   Label4: TLabel;                          - мітка для виводу швидкості ЦПУ.

   Label5: TLabel;                          - додаткова мітка, для того, якщо в системі більше 1 ЦПУ

   Label6: TLabel;                          - додаткова мітка, для того, якщо в системі більше 1 ЦПУ

   Label7: TLabel;                          - додаткова мітка, для того, якщо в системі більше 1 ЦПУ

   Label8: TLabel;                          - додаткова мітка, для того, якщо в системі більше 1 ЦПУ

   Label9: TLabel;                          - додаткова мітка, для того, якщо в системі більше 1 ЦПУ

   Label10: TLabel;                        - додаткова мітка, для того, якщо в системі більше 1 ЦПУ

   Image1:TImage;                         - контейнер для малюнка, на який його можна розмістити

   StaticText1:TStaticText;       - мітка для виводу заголовка програми (розташована зверху)

   StaticText2: TStaticText;      - мітка для виводу автора програми (розташована внизу).

Модулі які використовуються в програмі:

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls, Registry, jpeg, ExtCtrls;    

Основні типи, які використовуються в програмі:

type

 TCPUID = array[1..4] of Longint;

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

 TForm1 = class(TForm)

   Button1: TButton;

   Button2: TButton;

   Button3: TButton;

   Label1: TLabel;

   Label2: TLabel;

   Label3: TLabel;

   Label4: TLabel;

   Label5: TLabel;

   Label6: TLabel;

   Label7: TLabel;

   Label8: TLabel;

   Label9: TLabel;

   Label10: TLabel;

   Image1: TImage;

   StaticText1: TStaticText;

   StaticText2: TStaticText;

   procedure FormActivate(Sender: TObject);

   procedure Button1Click(Sender: TObject);

   procedure Button2Click(Sender: TObject);

   procedure Button3Click(Sender: TObject);

Функція для визначення кількості ядер в ЦПУ:

function GetCPUCount: byte; // Функція повертає числове значення кількості ядер

var

 si: TSystemInfo;  // Об’явлення змінної si типу TSystemInfo

begin                       // Початок функції

 GetSystemInfo(si); // Системна функція, яка передає в змінну si значення про систему

 Result := si.dwNumberOfProcessors; // функція повертає значення кількості ядер.

end;

Функція яка визначає виробника ЦПУ, використовується код Ассемблера.

function GetCPUVendor : TVendor; assembler; register;

asm

 PUSH    EBX     // Зберігається запис регістра

 PUSH    EDI

 MOV     EDI,EAX   // Повертає значення типу TVendor

 MOV     EAX,0

 DW      $A20F    // CPUID команда

 MOV     EAX,EBX

 XCHG  EBX,ECX     // збереження результату ECX

 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     // відновлюємо регістри

 POP     EBX

end;

function GetCPUSpeed: double; // Функція повертає значення в числовому значенні

const                                           // Робимо об’явлення констант

 DelayTime = 500;                     // час вимірюється в мілісекундах

Var                                              // Обявлення змінних

 TimerHi, TimerLo: DWORD;

 PriorityClass, Priority: integer;

begin

 PriorityClass := GetPriorityClass(GetCurrentProcess);

 Priority := GetThreadPriority(GetCurrentThread);

 SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);

 SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);

 Sleep(10);  // Робимо затримку програми на 10 мілісекунд

 Asm           // Вставка Асемблеровського коду

   dw 310Fh // rdtsc

   mov TimerLo, eax

   mov TimerHi, edx

 end;

 Sleep(DelayTime);

 Asm           // Вставка Асемблеровського коду

   dw 310Fh // rdtsc

   sub eax, TimerLo

   sbb edx, TimerHi

   mov TimerLo, eax

   mov TimerHi, edx

 end;

 SetThreadPriority(GetCurrentThread, Priority);

 SetPriorityClass(GetCurrentProcess, PriorityClass);

 Result := TimerLo / (1000.0 * DelayTime);

end;

Тіло програми:

Процедура при активації (запуску) программи:

procedure TForm1.FormActivate(Sender: TObject);

var                // Об’явлення змінних

 i: integer;   //  Об’явлення змінної і числового типу

begin

 for i := 1 to 10 do  // Через цикл очищаемо мітки

   TLabel(FindComponent('Label'+IntToStr(i))).Caption := '';

end;

Процедура обробки натиску на кнопку (Button1) :

procedure TForm1.Button1Click(Sender: TObject);

var                              // Об’явлення змінних

 CPUname: string;  

 Reg: TRegistry;

 i, a: integer;

begin

 Label1.Caption := 'Производитель: ' + GetCPUVendor;  // Заносимо в мітку1

                                                                      // інформацію про виробника використовуючи  

     // функцію GetCPUVendor, яку ми описали в

     // глобальному розділі

 Label2.Caption := 'Колличество CPU: ' + IntToStr(GetCPUCount); // Заносимо в мітку2

                                                                      // інформацію про кількості

     // ЦПУ використовуючи  

     // функцію GetCPUCount, яку ми описали в

     // глобальному розділі

 a := 3;      // призначаємо змінній а числове значення «3»

 CPUname := '';    // Очищаємо змінну CPUname

 

 if (GetCPUCount) > 1 then  // Початок умови якщо ядер в ЦПУ більше ніж 1

   begin

     for i := 1 to GetCPUCount do

       begin

         Reg := TRegistry.Create;

         try

           Reg.RootKey := HKEY_LOCAL_MACHINE; // занесення інформацію про реєстр

           if Reg.OpenKey('HARDWARE\DESCRIPTION\System\CentralProcessor\'+

  IntToStr(i), False)

 // читаємо назву ЦПУ

 then  CPUname := Reg.ReadString('ProcessorNameString');

        finally

           Reg.Free;

         end;

// Виводимо інформацію про ЦПУ

         TLabel(FindComponent('Label'+IntToStr(a))).Caption :=

                         'Наименование ядра ' + IntToStr(i) + ' CPU: ' + CPUname;

         inc(a);

// Виводимо інформацію про швидкість ЦПУ.

TLabel(FindComponent('Label'+IntToStr(a))).Caption := 'CPU speed' + IntToStr(i) + Format(': %f MHz', [GetCPUSpeed]);

         inc(a);

       end;

   end

 else // якщо наша умова (більше 1 ядра) не виконалась, тоді ЦПУ має 1 ядро і

// записуємо інформацію тільки як одноядрового ЦПУ.

   begin

     Reg := TRegistry.Create;

       try

         Reg.RootKey := HKEY_LOCAL_MACHINE;

         if Reg.OpenKey('HARDWARE\DESCRIPTION\System\CentralProcessor\0', False)                                                                               then

           CPUname := Reg.ReadString('ProcessorNameString');

       finally

         Reg.Free;

       end;

       Label3.Caption := 'Наименование CPU: ' + CPUname;

       Label4.Caption := Format('CPU speed: %f MHz', [GetCPUSpeed]);

   end;

end;

Процедура очищення міток, дія аналогічна, як процедури при запуску програми

procedure TForm1.Button2Click(Sender: TObject);

var

 i: integer;

begin

 for i := 1 to 10 do

   TLabel(FindComponent('Label'+IntToStr(i))).Caption := '';

end;

Процедура завершення програми:

procedure TForm1.Button3Click(Sender: TObject);

begin

 Close;  // Функція для закриття програми.

end;

5. Керівництво користувачеві.

Дана програма видає інформацію про ЦПУ, який встановлений в комп’ютер:

Кнопка «Получить информацию» запускає програму, яка видасть інформацію про ЦПУ вашого комп’ютера. На мал. обведена червоною лінією

Кнопка «Очистить окно» очищає дане вікно для повторного запуску кнопки «Получить информацию». На мал. обведена червоною лінією

Кнопка «Завершить програму » - закриває вікно програми, тип самим звільняючи область пам’яті, яку вона займала. На мал. обведена червоною лінією

6. Приклад роботи програми.

Запуск програми під різними комп’ютерами, з різними ЦПУ.

1-ядровий ЦПУ

2-ядровий ЦПУ

4-ядровий ЦПУ

7. Програмний код програми.

unit Unit1;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls, Registry, jpeg, ExtCtrls;

type

 TCPUID = array[1..4] of Longint;

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

 TForm1 = class(TForm)

   Button1: TButton;

   Button2: TButton;

   Button3: TButton;

   Label1: TLabel;

   Label2: TLabel;

   Label3: TLabel;

   Label4: TLabel;

   Label5: TLabel;

   Label6: TLabel;

   Label7: TLabel;

   Label8: TLabel;

   Label9: TLabel;

   Label10: TLabel;

   Image1: TImage;

   StaticText1: TStaticText;

   StaticText2: TStaticText;

   procedure FormActivate(Sender: TObject);

   procedure Button1Click(Sender: TObject);

   procedure Button2Click(Sender: TObject);

   procedure Button3Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form1: TForm1;

implementation

function GetCPUCount: byte;

var

 si: TSystemInfo;

begin

 GetSystemInfo(si);

 Result := si.dwNumberOfProcessors;

end;

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     {восстанавливаем регистры}

 POP     EBX

end;

function GetCPUSpeed: double;

const

 DelayTime = 500; // время измерения в миллисекундах

var

 TimerHi, TimerLo: DWORD;

 PriorityClass, Priority: integer;

begin

 PriorityClass := GetPriorityClass(GetCurrentProcess);

 Priority := GetThreadPriority(GetCurrentThread);

 SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);

 SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);

 Sleep(10);

 asm

   dw 310Fh // rdtsc

   mov TimerLo, eax

   mov TimerHi, edx

 end;

 Sleep(DelayTime);

 asm

   dw 310Fh // rdtsc

   sub eax, TimerLo

   sbb edx, TimerHi

   mov TimerLo, eax

   mov TimerHi, edx

 end;

 SetThreadPriority(GetCurrentThread, Priority);

 SetPriorityClass(GetCurrentProcess, PriorityClass);

 Result := TimerLo / (1000.0 * DelayTime);

end;

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);

var

 i: integer;

begin

 for i := 1 to 10 do

   TLabel(FindComponent('Label'+IntToStr(i))).Caption := '';

end;

procedure TForm1.Button1Click(Sender: TObject);

var

 CPUname: string;

 Reg: TRegistry;

 i, a: integer;

begin

 Label1.Caption := 'Производитель: ' + GetCPUVendor;

 Label2.Caption := 'Колличество CPU: ' + IntToStr(GetCPUCount);

 a := 3;

 CPUname := '';

 

 if (GetCPUCount) > 1 then

   begin

     for i := 1 to GetCPUCount do

       begin

         Reg := TRegistry.Create;

         try

           Reg.RootKey := HKEY_LOCAL_MACHINE;

           if Reg.OpenKey('HARDWARE\DESCRIPTION\System\CentralProcessor\'+IntToStr(i), False) then

             CPUname := Reg.ReadString('ProcessorNameString');

         finally

           Reg.Free;

         end;

         TLabel(FindComponent('Label'+IntToStr(a))).Caption :=

                         'Наименование ядра ' + IntToStr(i) + ' CPU: ' + CPUname;

         inc(a);

         TLabel(FindComponent('Label'+IntToStr(a))).Caption := 'CPU speed' + IntToStr(i) +

                         Format(': %f MHz', [GetCPUSpeed]);

         inc(a);

       end;

   end

 else

   begin

     Reg := TRegistry.Create;

       try

         Reg.RootKey := HKEY_LOCAL_MACHINE;

         if Reg.OpenKey('HARDWARE\DESCRIPTION\System\CentralProcessor\0', False) then

           CPUname := Reg.ReadString('ProcessorNameString');

       finally

         Reg.Free;

       end;

       Label3.Caption := 'Наименование CPU: ' + CPUname;

       Label4.Caption := Format('CPU speed: %f MHz', [GetCPUSpeed]);

   end;

end;

procedure TForm1.Button2Click(Sender: TObject);

var

 i: integer;

begin

 for i := 1 to 10 do

   TLabel(FindComponent('Label'+IntToStr(i))).Caption := '';

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

 Close;

end;

end.

8. Висновок про виконану роботу.

З даної лабораторної роботи, я навчився  дізнаватися інформацію про ЦПУ, також робити вставку кода Асемблера в мову Delphi. Розрахунок тактової частоти ЦПУ, хто являється виробником даного ЦПУ, а також модель і знаходження кількість ядер в даному ЦПУ.

9.Використана література, або інші джерела.

  1.  Фаронов В.В. Delphi. Программирование на языке высокого уровня: Учебник для вузов – СПб.: Питер, 2005. – 640 с.: ил.
  2.  Фленов М. Е. Библия программиста Delphi (электронный вариант).
  3.  Автор Гуйдо Гайбелса. Перевод Анатолия Подгорецкого. Использование ассемблера в Delphi (электронный вариант)
  4.  http://ru.wikipedia.org/wiki/Процессор
  5.  http://www.kansoftware.ru/?did=163

PAGE  22


 

А также другие работы, которые могут Вас заинтересовать

66023. Управление финансами 106.38 KB
  Управление финансами это деятельность по обеспечению развития финансовой системы государства или конкретного субъекта хозяйствования в соответствии с заданными количественными и качественными параметрами. Управление финансами является составной частью общей системы управления социально-экономическими процессами.
66024. Федеральное казначейство и его функции 18.77 KB
  В России переход к казначейскому исполнению бюджета начался в 1992 г. исполнение бюджета в нашей стране было банковским. Чем отличаются эти две формы исполнения бюджета При банковском исполнении бюджета средства налогоплательщиков поступали на счета налоговых органов в Банке России или в коммерческих банках.
66025. Пенсионная реформа РФ 24.71 KB
  О дополнительных страховых взносах на накопительную часть трудовой пенсии и государственной поддержке формирования пенсионных накоплений начало приема заявлений о вступлении в отношения по ДСВ. 2009 С 1 января 2009 года действует новая система добровольных...
66026. Бюджетная реформа РФ 31 KB
  Как следует из программы повышения эффективности бюджетных расходов опубликованной сегодня Минфином министерства и ведомства будут получать государственные деньги только под конкретные долгосрочные целевые программы.
66028. Проблемы медицинского и социального обеспечения РФ. Минимальная медицинская помощь 24.76 KB
  Основные проблемы обеспечения доступности и качества медицинской помощи гражданам Российской Федерации и способы их решения Одним из основных направлений дальнейшего развития здравоохранения является разработка мер направленных на повышение качества и обеспечение доступности медицинской помощи гражданам Российской Федерации.