- •Лабораторна робота 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. Уведення з клавіатури
3.1. Принципи організації підпрограм
Підпрограма, у залежності від виконуваних нею функцій, може вимагати передачі з зухвалої програми визначених даних, що прийнято називати аргументами або параметрами і повертати в зухвалу програму результат обчислень. Деякі підпрограми можуть узагалі не приймати ніяких параметрів і не повертати результат.
Можна обійтися і без явного визначення процедури, позначивши перший рядок програми деякою міткою (основний спосіб у fasm).
Найчастіше підпрограма (процедура) оформляється так, як показано в наступному фрагменті коду:
format pe
mov AX, 0
mov BX, 0
jmp start
;-і-і-і-і add1 proc
add1: ; крапка входу в процедуру addl
inc AX
ret ; повернення в зухвалу програму
;-і-і-і-і add1 endp
;-і-і-і-і sub1 proc
sub1: ; крапка входу в процедуру subl
dec BX
ret ; повернення в зухвалу програму
;-і-і-і-і sub1 endp
start:
call add1; виклик процедури addl
call sub1; виклик процедури subl
ret...
Для 32-розрядних додатків усі виклики процедур вважаються ближніми.
Слід зазначити, що в мові асемблера імена і мітки, описані в процедурі, повинні бути унікальними і не повинні збігатися з іншими іменами в програмі. У мові асемблера мається можливість створювати вкладені процедури, тобто процедури усередині процедур, але особливих переваг це не дає і використовується відносно рідко.
Особливе значення в механізмі виклику процедури і повернення з неї має стек. Оскільки в стеці зберігається адреса повернення, то процедура, що використовує його для збереження проміжних результатів, повинна до моменту виконання команди ret відновити стек у тім стані, у якому він знаходився перед її викликом. У цьому випадку говорять, що процедура повинна відновити, або очистити, стік.
У момент виклику процедури команда call поміщає в стек адреса команди, що випливає безпосередньо за call, зменшуючи значення покажчика стека SP (ESP). Команда ret викликуваної процедури використовує цю адресу для повернення в зухвалу програму, автоматично збільшуючи при цьому покажчик вершини стека.
Типи адресації (near або far) команд ret і call повинні відповідати один одному. Викликувана процедура може викликати за допомогою команди call наступну процедуру і т. д., тому стік повинний мати достатній розмір для того, щоб зберігати в ньому всі записувані дані.
Варто сказати, що команда ret не аналізує стан або вміст стека. Вона витягає з вершини стека слово або подвійне слово, у залежності від типу адресації, думаючи, що це адреса повернення, по якому передається управління. Якщо до моменту виконання команди ret покажчик стека виявиться зміщеним у ту або і сторону, уміст вершини стека може представляти всі що завгодно, тому передача управління по цій адресі приведе до краху програми.
Команда call може мати один з перерахованих нижче форматів виклику:
прямий ближній (у межах поточного програмного сегмента);
прямий далекий (виклик процедури, розташованої в іншому програмному сегменті);
непрямий ближній (у межах поточного програмного сегмента з використанням перемінна, утримуюча адреса переходу);
непрямий далекий (виклик процедури, розташованої в іншому програмному сегменті, з використанням перемінна, утримуюча адреса переходу).
Тип адресації при виклику процедури залежить від використовуваної моделі пам'яті.