- •Лабораторна робота 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. Уведення з клавіатури
7. Критерії оцінювання.
На 3 бали:
Вміти дати відповіді на питання для самоконтролю та самоперевірки. Виконати завдання 1
На 4 бали:
Виконати завдання 2 (один приклад)
На 5 балів:
Виконати завдання 2 (два приклади)
8. Питання для самоперевірки
Особливості виконання досліджуваних базових команд процесора і8086/і286.
Поняття про байти коду операції, способах адресації, регістрах і зсувах.
Асемблювання і дизасемблювання команд на своїх прикладах.
Необхідність у контролі діапазону цілих числових даних при введенні.
Поняття про 16- і 32-розрядні обчислювальні платформи.
Діапазон припустимих значень для цілих числових змінних.
9. Література
1. Голуб Н. Г. Искусство программирования на Ассемблере. Лекции и упражнения.- СПб.: ООО”ДиаСофтЮП”, 2002. – 656 с.
2. Магда. Ю. С. M12 Ассемблер для процессоров Intel Pentium. – СПб.: Питер, 2006. – 410с.
3. Ирвин Кип. Язык ассемблера для процессоров Intel, 4-е издание.: Пер с англ. – М.: Издательский дом ”Вильямс”, 2005. – 912с.
Лабораторна робота 5.
Тема: Робота з бітами на асемблері
Цель: Вивчити склад команд МП Intel для роботи з бітами.
1. Підготовка до роботи.
Ознайомитися із набором команд мови асемблера для роботи із бітами [1, стор. 153-173], [2, стор. 311-313], [3, стор. 249-260,305-320].
2. Питання для самоконтролю.
1. У чому полягає різниця між командами AND і TEST?
2. Опишіть логіку роботи команди логічного додавання по модулі 2.
3. Які види зсувів ви знаєте?
4. Які команди можуть оперувати з одиничним бітом, що знаходиться в пам'яті або регістрі загального призначення?
5. Для чого застосовується і як працює команда bswap?
3. Короткі теоретичні зведення
Розрізняють власне логічні операції, бітові операції і зсув. Вони виробляються над бітами байта або слова, тому ще називаються побітовими (порозрядними).
3.1. Логічні команди
Логічне заперечення (NOT, ,) – змінює значення операнда на протилежне
op1 |
rez |
приклад |
0 |
1 |
(op1)=01010101b |
1 |
0 |
not (op1)=10101010b |
Логічне множення (кон’юнкція, AND, , ) – результат завжди 0, якщо один з операндів дорівнює 0:
op1 |
op2 |
rez |
приклад |
0 |
0 |
0 |
op1=01010101b |
0 |
1 |
0 |
and |
1 |
0 |
0 |
op2=11001101b |
1 |
1 |
1 |
rez=01000101b |
Логічне додавання (диз'юнкція, OR, +, ) – результат завжди 1, якщо один з операндів дорівнює 1:
op1 |
op2 |
rez |
приклад |
0 |
0 |
0 |
op1=01010101b |
0 |
1 |
1 |
or |
1 |
0 |
1 |
op2=11001101b |
1 |
1 |
1 |
rez=11011101b |
Логічна функція “що виключає або” (“додавання по модулю 2”, XOR, ) – результат завжди 0, якщо обоє операнда рівні:
op1 |
op2 |
rez |
приклад |
0 |
0 |
0 |
op1=01010101b |
0 |
1 |
1 |
xor |
1 |
0 |
1 |
op2=11001101b |
1 |
1 |
0 |
rez=10011000b |
В асемблері логічні команди реалізують чотири основні операції математичної логіки (таблиця 1):
логічне заперечення (NOT);
логічне множення (AND, TEST);
логічне додавання (OR);
додавання по модулю 2 (XOR).
Логічне заперечення — це операція одномісна (їй потрібний тільки один операнд), всі інші — двомісні.
Для асемблера, як ми знаємо, поняття тип даних (у тім смислу, як це розуміється в алгоритмічних мовах) не існує. Тому побітові операції застосовуються відповідно до правил математичної логіки до кожного біта окремо, починаючи з молодшого біта і закінчуючи старшим бітом. Для двомісних команд (відповідно до загальноприйнятого в асемблері правилами) відбувається установка (або очищення) відповідних бітів регістра прапорів (+). Можливі сполучення операндів такі ж, як і приведені в таблиці 1. Команда not уміст регістра прапорів не змінює
Таблиця 1. - Логічні команди в асемблері.
Синтаксис
|
Біти регістра прапорів |
|||||
OF |
SF |
ZF |
PF |
CF |
||
AND |
приймач, джерело |
0 |
+ |
+ |
+ |
0 |
TEST |
приймач, джерело |
0 |
+ |
+ |
+ |
0 |
OR |
приймач, джерело |
0 |
+ |
+ |
+ |
0 |
XOR |
приймач, джерело |
0 |
+ |
+ |
+ |
0 |
NOT |
приймач |
- |
- |
- |
- |
- |
У якості першого операнда використовують регістр мікропроцесора, за винятком сегментного, або комірка пам'яті. Другим операндом може бути регістр мікропроцесора, за винятком сегментного, комірка пам'яті або безпосереднє значення. Не допускається одночасне використання двох комірок пам'яті як операндів.
<Джерело> у логічних командах із двома операндами звичайно іменується маска. Звідси і термін маскування розрядів. Значення маски звичайно беруть або в двійковому, або в шістнадцятирічнім виді. Воно (значення) означає, що у відповідному біті встановлена одиниця (див. табл. 2), відповідно до малюнка 1.
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
8 |
0 |
Рисунок 1. – Формування маски
Таблиця 2. - Шістнадцятирічні маски
Номер біта |
Значення маски (HEX) |
Номер біта |
Значення маски (HEX) |
0 |
0001 |
8 |
0100 |
1 |
0002 |
9 |
0200 |
2 |
0004 |
10 |
0400 |
3 |
0008 |
11 |
0800 |
4 |
0010 |
12 |
1000 |
5 |
0020 |
13 |
2000 |
6 |
0040 |
14 |
4000 |
7 |
0080 |
15 |
8000 |
Увага. Логічні команди не мають нічого спільного (у смислі десяткового результату) зі звичними для людини арифметичними операціями. Інтерпретація результату — справа людини, а не комп'ютера (для нього рідними є тільки двійкові числа!).
3.1.1 Використання команд логічного множення AND і TEST
Ці операції звичайно застосовується для перевірки установки потрібних нам розрядів у 1.
Різниця між командами and і test полягає в тім, що команда test використовується для організації логічного порівняння операндів (за аналогією з командою арифметичного порівняння операндів cmp) з наступним умовним переходом, тому вона вміст приймача не змінює.
3.1.2 Використання команди логічного додавання OR
Ця операція звичайно застосовується для установки потрібних нам розрядів у 1.
3.1.3 Використання команди додавання по модулі 2 — X0R
Ця операція звичайно застосовується для обнуління потрібних нам розрядів, якщо вони встановлені в 1.
3.1.4 Команда логічного заперечення NOT
Це досить проста команда, що не має особливостей, а просто змінює значення кожного біта на протилежне