Міністерство освіти і науки України Дніпропетровський національний університет залізничного т ранспорту ім. Лазаряна
Кафедра «КІТ»
Звіт з навчальної практики
Виконав студент 916 групи
Вахмістров М.О.
Керівник практики: Лахно В. А.
Зміст
Зміст……………………………….……………………………………………………2
Теоритична частина………………………………..…………………………………..3
Завдання №1…………………………….……………………………………………...5
Завдання №2……………………………………………………………………………5
Завдання №3…………………………………………………………………………....7
Завдання №4…………………………………………………………………………....8
Завдання №5…………………………………………………………………………..10
Завдання №6…………………………………………………………………………..11
Завдання №7…………………………………………………………………………..12
Завдання №8……….…………………………………………………………………..13
Завдання №9…………………………………………………………………………..15
Завдання №10………………………………………………………………………...17
Завдання №11………………………………………………………………………....18
Теоритичні відомості
Сучасні ЕОМ можуть вирішувати найрізноманітніші задачі. Дляцього треба за допомогою програми «навчити» ЕОМ алгоритму рішення тієї або іншої задачі і ввести в неї початкові дані. Програма записується на алгоритмічній мові (наприклад, Паскаль, С++ або Бейсік), яка достатньо близька до природної мови (особливо англійської).
Проте ЕОМ не розуміє не тільки природної мови, але і алгоритмічної. Для розшифровки тексту програми, написаної на Паскалі або С++, в машині повинна знаходитися спеціальна програма – компілятор (транслятор), яка перекладає текст початкової програми з С++ або Паскаля на мову ЕОМ. Таким чином, обчислювальна машина – це технічний пристрій, в якому інформація про початкові дані вирішуваної задачі, правила її рішення (алгоритмі) і результати обчислень повинна задаватися у вигляді зміни яких-небудь фізичних величин:
- намагніченості матеріалу (як, наприклад, для відтворення мелодії за допомогою магнітофона або збереження даних про атестацію студентів по дисциплінах учбового плану на магнітному диску);
- освітленості екрану (дисплей) і ін.
По-справжньому розв'язати проблеми, пов'язані з апаратурою (або навіть, більш того, залежні від апаратури як, наприклад, підвищення швидкодії програми), неможливо без знання асемблера. Програміст або будь-який інший користувач може використовувати будь-які високорівневі засоби, і, можливо, навіть не підозрювати, що насправді комп'ютер
виконує не команди мови, на якій написана його програма, а їх трансформоване уявлення у формі послідовності команд зовсім іншої мови - машинної. Яким би розумним не був програміст, якою б не була мова, на якій він написав свою програму, без знання асемблера йому не обійтися. І не випадково практично всі компілятори мов високого рівня містять засоби зв'язку своїх модулів з модулями на асемблері або підтримують вихід на асемблерний рівень програмування.
Програмну модель процесора в архітектурі IA-32 (Intel Architecture) процесорів Intel складає наступний набір ресурсів (рис. 1):
• простір пам'яті, що адресується, до 232 байт (4 Гбайт), для Pentium II і вище – 236 байт (64 Гбайт);
• сегментні регістри;
• регістри стану і управління;
• регістри пристрою обчислень з плаваючою комою (співпроцесора);
• набір регістрів цілочисельного ММХ – розширення, відображених на регістри співпроцесора (вперше з'явилися в архітектурі процесора Pentium ММХ);
• набір регістра ММХ – розширення з плаваючою крапкою (вперше з'явилися в архітектурі процесора Pentium III);
• програмний стек – спеціальна інформаційна структура, для роботи з якою передбачені спеціальні машинні команди.
Набір регістрів
Регістрами називаються елементи високошвидкісної пам'яті, розташовані в середині процесора в безпосередній близькості від його виконавчого ядра. Доступ до них здійснюється незрівнянно швидше, ніж до елементів оперативної пам'яті. Більшість регістрів має певне функціональне призначення. З погляду програміста, їх можна розділити на дві великі групи.
Першу групу утворюють призначені для користувача регістри, до яких відносяться:
- регістри загального призначення ЕАХ/АХ/АН/AL, EBX/BX/BH/BL, EDX/DX/DH/DL, ЕСX/CX/CH/CL, EBP/BP, ESI/SI, EDI/DI, ESP/SP призначені для зберігання даних і адрес, програміст може їх використовувати (з певними обмеженнями) для реалізації своїх алгоритмів;
- сегментні регістри CS, DS, SS, ES, FS, GS слугують для зберігання значень, інтерпретація яких залежить від режиму роботи процесора. В реальному режимі сегментні регістри містять адресу параграфа початку сегменту в пам'яті. В захищеному режимі сегментні регістри містять індекс входу в одну з системних таблиць дескрипторів – GDT або LDT;
- регістри співпроцесора ST(0), ST(1), ST(2), ST(3), ST(4), ST(5), ST(6), ST(7), призначені для написання програм, що оперують даними з плаваючою комою;
- цілочисельні регістри цілочисельного ММХ – розширення ММХ0, ММХ1, ММХ2, ММХ3, ММХ4, ММХ5, ММХ6, ММХ7;
- регістри ХММ – розширення з плаваючою комою ХММ0, ХММ1, ХММ2, ХММ3, ХММ4, ХММ5, ХММ6, ХММ7;
-
регістри стану і управління (регістр
прапорів EFLAGS/FLAGS
і
регістр покажчика команди EIP/IP)
містять інформацію про стан процесора,
виконуваної програми і дозволяють
змінити цей стан.
Регістри загального призначення
Перерахуємо регістри, що відносяться до групи регістрів загального призначення і фізично знаходяться в арифметично-логічному пристрої (регістри АЛУ):
• регістр – акумулятор (асcumulator register) EAX/AX/AH/AL застосовується для зберігання проміжних даних, в деяких командах його використовування обов'язкове;
- базовий регістр (base register) EBX/BX/BH/BL задуманий як місце зберігання базової адреси деякого об'єкту в пам'яті;
- регістр – лічильник (сount register) ЕСX/CX/CH/CL застосовується в командах, що проводять деякі багатократні дії;
- регістр даних (data register) EDX/DX/DH/DL, так само як і регістр EAX/AX/AH/AL, який зберігає проміжні дані (в деяких командах його явне використовування обов'язкове, в інших його участь мається на увазі неявно).
Сегментні
регістри
Сегмент коду. Містить команди програми. Для доступу до цього сегменту служить регістр сегменту коду (code segment register) CS. Він містить значення, яке по-різному інтерпретується процесором, залежно від поточного режиму роботи. В реальному режимі – це адреса першого параграфа сегменту, в захищеному – індекс елемента в таблиці дескрипторів (глобальної GDT або локальної LDT ).
Сегмент даних. Зберігає оброблювані програмою дані. Для доступу до цього сегменту слугує регістр сегменту даних (data segment register ) DS, в який поміщена адреса сегменту даних поточної програми.
Сегмент стека. Роботу із стеком процесор організовує за наступним принципом: останній записаний в цю область елемент вибирається першим. Доступ до області стека виконується через регістр стека (stack segment register ) SS, що містить адресу сегменту стека.
Додатковий сегмент даних. Неявно алгоритми виконання більшості машинних команд припускають, що оброблювані ними дані розташовані в сегменті даних, адреса якого знаходиться в регістрі сегменту даних DS. Якщо програмі недостатньо одного сегменту даних, то вона має нагоду одночасно задіювати ще три додаткові сегменти даних, адреси яких повинна міститися в регістрах додатково сегменту даних (extension data segment register ) ES, GS, FS. Серед них слід особливо виділити регістр ES. Він використовується для забезпечення цілочисельних команд процесора, адресуючи собою операнд – джерело.
