- •Лабораторна робота 1.
- •1. Символи.
- •2 Представлення чисел у пам’яті пеом.
- •2.1 Цілі числа. Цілі числа без знака
- •2.2 Цілі числа зі знаком
- •3 Дійсні числа.
- •3.1 Представлення дійсних чисел у двійковому нормалізованому виді.
- •3.2 Машинні формати дійсних чисел
- •3.2.1. Формат 32 біти - float (або single)
- •3.2.2. Формат 64 біти - double
- •4. Завдання на лабораторну роботу.
- •5. Методичні вказівки з оформлення звіту
- •6. Рішення типового прикладу (без оцінки похибки перетворення)
- •7. Питання для самоперевірки
- •8. Література
- •Лабораторна робота 2.
- •1. 3 Формати файлів, що виконуються, які підтримуються у fasm
- •2. Завдання на лабораторну роботу:
- •3. Методичні вказівки з оформлення звіту
- •4. Питання для самоперевірки.
- •Лабораторна робота 3.
- •1. Підготовка до роботи.
- •2. Питання для самоконтролю.
- •3. Короткі теоретичні відомості.
- •3.1 Команди пересилання даних.
- •3.1.3 Операції зі стеком:
- •3.2 Робота із налагоджувачем OllyDbg.
- •3.2.2. Розглянемо основні команди меню OllyDbg.
- •4. Завдання на лабораторну роботу.
- •9. Література
- •Лабораторна робота 4.
- •3.2. Операції із прапорами процесора:
- •3.3 Команди розповсюдження знаку
- •4. Методичні вказівки з оформлення звіту
- •5. Рішення типового прикладу.
- •6. Завдання на лабораторну роботу
- •7. Критерії оцінювання.
- •8. Питання для самоперевірки
- •9. Література
- •Лабораторна робота 5.
- •3.2. Команди зсуву
- •3.3 Команди сканування бітів
- •4. Методичні вказівки з оформлення звіту
- •5. Приклади використання бітових команд
- •6. Завдання на лабораторну роботу
- •7. Критерії оцінювання.
- •8. Питання для самоперевірки
- •9. Література
- •Лабораторна робота 6.
- •1. Підготовка до роботи.
- •2. Питання для самоконтролю.
- •3. Короткі теоретичні зведення.
- •3.1. Команди безумовної передачі управління
- •3.1.1. Команда безумовного переходу jmp
- •3.2. Команди умовної передачі управління Jcc
- •3.2.1. Перша група команд умовного переходу.
- •3.2.2 Друга група команд умовного переходу.
- •3.2.3. Третя група команд умовного переходу.
- •3.3. Команди управління циклами looPx
- •3.3.1. Команда loop — перехід по лічильнику
- •3.3.2. Команда loope (loopz) перехід по лічильнику і якщо дорівнює
- •3.3.3. Команда loopne (loopnz) перехід по лічильнику і якщо не дорівнює
- •4. Методичні вказівки з оформлення звіту
- •5. Приклади використання бітових команд
- •6. Завдання на лабораторну роботу.
- •7. Критерії оцінювання.
- •8. Питання для самоперевірки
- •9. Література
- •Лабораторна робота 7.
- •1. Підготовка до роботи.
- •2. Питання для самоконтролю.
- •3. Короткі теоретичні відомості.
- •3.1. Реалізація основних операцій по обробці масивів мовою асемблера.
- •4. Методичні вказівки з оформлення звіту
- •5. Критерії оцінювання.
- •6. Завдання на лабораторну роботу.
- •7. Питання для самоперевірки
- •8. Література
- •Лабораторна робота 8.
- •1. Підготовка до роботи.
- •2. Питання для самоконтролю.
- •3. Короткі теоретичні відомості.
- •4. Приклади виконання деяких типових задач обробки рядків
- •4. Завдання на лабораторну роботу.
- •Лабораторна робота 9.
- •1. Підготовка до роботи.
- •2. Питання для самоконтролеві.
- •3. Короткі теоретичні відомості
- •3.1. Принципи організації підпрограм
- •3.2. Параметри процедур і значення, що повертаються
- •3.3. Використання загальних перемінних у процедурах
- •3.4. Особливості fasm по організації підпрограм (Windows - додатка).
- •Лабораторна работа 10-11.
- •3.1.2. Засобу bios
- •3.2. Уведення з клавіатури
8. Питання для самоперевірки
Навести таблиці істинності для основних булевих функцій
У чому особливості різних команд зсуву (чи змінюється флаг CF)?
Який принцип ділення та множення на ступені двійки за допомогою команд зсуву?
Як сформувати маску, для перевірки декількох розрядів двійкового числа?
Яким чином інтерпретувати результати маскування одразу кількох розрядів?
9. Література
1. Голуб Н. Г. Искусство программирования на Ассемблере. Лекции и упражнения.- СПб.: ООО”ДиаСофтЮП”, 2002. – 656 с.
2. Магда. Ю. С. M12 Ассемблер для процессоров Intel Pentium. – СПб.: Питер, 2006. – 410с.
3. Ирвин Кип. Язык ассемблера для процессоров Intel, 4-е издание.: Пер с англ. – М.: Издательский дом ”Вильямс”, 2005. – 912с.
Лабораторна робота 6.
Тема: Команди передачі управління
Ціль: Ознайомитися зі складом команд передачі управління, одержати практичні навички по програмуванню розгалужених обчислювальних процесів.
1. Підготовка до роботи.
Ознайомитися із основними командами передачі управління мови асемблер [1, стор. 183-202], [2, стор. 61-93], [3, стор. 191-193].
2. Питання для самоконтролю.
Дайте визначення „обчислювальний процес”
Дайте визначення „лінійний обчислювальний процес”
Дайте визначення поняття „розгалуження”.
Для чого використовуються розгалуження?
Дайте визначення поняття „цикл”.
Для чого використовуються цикли?
3. Короткі теоретичні зведення.
Послідовність виконання лінійних команд визначається значенням регістра EIP. Команди передачі управління дозволяють порушити природну послідовність виконання команд шляхом зміни вмісту регістра EIP. У ході лабораторної роботи розглянемо базові команди передачі управління. Це — команди безумовного переходу на визначену адресу в пам'яті комп'ютера, команди умовного переходу в залежності від результату перевірки умови і команди організації циклічних обчислень. Команди передачі управління не змінюють значення прапорів.
3.1. Команди безумовної передачі управління
Ми познайомимося з трьома основними командами безумовної передачі управління. Найпростіша з них — команда JMP. Команди CALL і RET ледве більш складні і є взаємно зворотними командами і будуть розглянуті в подальших лабораторних роботах.
3.1.1. Команда безумовного переходу jmp
Ця команда є аналогом самого багатостраждального (по кількості нападок на нього) і відомого в алгоритмічних мовах оператора:
goto мітка;
У таких мовах, як C++ або Паскаль, у більшості випадків прекрасно можна обійтися без цього оператора. Він вважається потенційною погрозою й у рамках структурного програмування його не застосовують узагалі. Наприклад, у мові Java таке ключове слово є, але воно не підтримується. Мнемокод команди безумовної передачі управління JMP отриманий у результаті скорочення слова: JuMP — стрибок. Команда ця містить один операнд і має наступний формат (синтаксис):
JMP мітка
Мітка, як і в алгоритмічних мовах, позначає потрібну команду, на яку варто передати управління, і може мати атрибут NEAR (за замовчуванням) або FAR. Якщо мітка має атрибут NEAR, безумовний перехід здійснюється в межах даного сегмента. У цьому випадку логіка роботи команди наступна:
<EIР>= <EIР> + зсув_до_потрібної_команди
Таким чином, автоматично відбувається виконання команди, позначеною міткою.
Рис.1. Логіка роботи команди безумовного переходу
Оскільки в даному випадку перехід здійснюється в межах сегмента, зсув_ до_потрібної_команди не може перевищувати двох байт. Потрібна нам команда може розташовуватися убік великих адрес, тоді говорять, що перехід здійснюється вперед. У цьому випадку зсув_до_потрібної_команди — позитивне. Якщо, навпаки, потрібна нам команда розташовується убік менших адрес, говорять про перехід назад. У цьому випадку зсув до потрібної команди — негативне.
Можна заощадити один байт при реалізації команди безумовної передачі управління, якщо зробити перехід коротким (SHORT), тобто зсув у межах |-128... 127]. У цьому випадку перехід уперед потрібно записати в такий спосіб:
jmp short forward
Тепер розберемося з більш складним випадком, коли треба передати управління мітці far_label, що знаходиться в іншому сегменті (FAR перехід). У цьому випадку, з погляду комп'ютера, міняється не тільки вміст регістра EIP, але і вміст сегментного регістра CS.
У цьому випадку логіка роботи команди JMP наступна:
<CS>=<Code2>
<EIР>= <EIР> + зсув_до_потрібної_команди
Таким чином, автоматично відбувається виконання команди, позначеної міткою far_label, що знаходиться в іншому кодовому сегменті (FAR-перехід). Усі міркування щодо зсуву аналогічні ближньому переходові, тільки для реального режиму роботи процесора зсув тут завжди 16-розрядне.