- •Лабораторна робота 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. Уведення з клавіатури
5. Приклади використання бітових команд
Приклад 1. Обчислити значення факторіала р = n! = 1*2*3*...*n. Відомо, що 0! = 1. Негативним значення n бути не може (за правилами математики). Вихідний код asm-модуля може мати такий вигляд:
format pe
jmp start
n dw 6
p dw?
start:
mov cx,[n] ; кількість повторень
mov si,1
mov ax, si
jcxz @@Exit ; if cx=0 then Exit
@@begin:;========== початок циклу
mul si ; <dx: ax> = <ax>*si
inc si
;==== вихід з циклу
loop @@begin
@@Exit:
mov [p], ax
ret
Мітки з префіксом @@ вважаються локальними. Якщо компілятор зустріне мітку з таким же ім'ям, він просто при компіляції привласнить їй інше ім'я (звичайно ці мітки одержують наприкінці імені номер, що збільшується на одиницю — усі дуже просто!).
Приклад 2. Обчислити значення суми чисел натурального ряду: s = 1+2+3+...+n. Обчислення закінчити, як тільки значення суми стане рівним деякому числу до або не будуть перебрані всі n чисел. Вихідний код модуля може мати такий вигляд:
format pe
jmp start
n dw 10
k dw 7
s dw?
start:
mov cx,[n] ; кількість повторень
xor ax, ax
xor si, si
jcxz @@Exit ; if cx=0 then Exit
@@begin:;=======ПОЧАТОК циклу ==============
inc si
add ax, si
cmp ax,[k]
;==Вихід з циклу, якщо <ax>=k або <cx>=0
loopNE @@begin
@@Exit:
mov [s], ax
ret
6. Завдання на лабораторну роботу.
При рішенні прикладів і завдань необхідно:
а) скласти алгоритм рішення задачі
б) напроти відповідних елементів алгоритму записати команди асемблера
в) скласти програму (format pe) і відкомпілювати, при необхідності виправити синтаксичні помилки.
г) перевірити виконання програми в дебагері OllyDbg, при наявності помилок виправити текст програми і повторити дії по п. г)
д) змінити заголовок програми для компіляції модуля (format coff), додати відповідні зміни для одержання працездатного модуля для стикування з програмою на C++ (див. лабораторну роботу №2).
е) створити консольний проект на С++, додати отриманий модуль, скомпілювати додаток (див. лабораторну роботу №2).
ж) перевірити правильність роботи програми на різних наборах вхідних даних.
з) оформити звіт і зробити осмислені висновки по суті розв'язуваної задачі.
Завдання 1. Порахувати вираження відповідно до варіанта.
1) 2)
3) 4)
5) 6)
7) 8)
9) 10)
11) 12)
13) 14)
15) 16)
17) 18)
19) 20)
21) 22)
23) 24)
Завдання 2. Знайти значення по формулі Програма повинна забезпечувати аналіз переповнення або неприпустимих операцій (наприклад, ділення на 0). При виникненні переповнення подальші дії не виконуються, у результат записується число FFFFFFFF. Результат записати в осередок розміром подвійне слово (dd). Усі числа зі знаком. При діленні залишок відкидається.
N |
Формула |
X |
Y |
Z |
W |
U |
J |
K |
1 |
((X-Y)*Z-W/U+J)/K |
dw |
dw |
dw |
db |
dw |
db |
dw |
2 |
((X*Z-W*U/(J+K))/Y |
db |
db |
dw |
db |
db |
dw |
dw |
3 |
(X-Y*Z-W/(U+J))+K |
db |
dw |
db |
db |
dw |
db |
dw |
4 |
(X*Y-Z+(W-U)*J)/K |
db |
dw |
dw |
db |
dw |
db |
db |
5 |
((X-Y)/Z-(W*U+J))-K |
dw |
dw |
dw |
db |
db |
db |
dw |
6 |
((X+Y)/(Z-W/U-J))*K |
db |
dw |
dw |
db |
dw |
db |
dw |
7 |
(X*Y+Z*W-U/J)/K |
db |
dw |
dw |
db |
db |
db |
db |
8 |
(X+Y)*(Z-W/U+J)-K |
db |
db |
dw |
db |
dw |
db |
dw |
9 |
X/Y-Z/W+U*J-K |
dw |
dw |
db |
db |
dw |
db |
db |
10 |
(X-Y*Z-W/U+J)/K |
db |
db |
dw |
db |
dw |
db |
dw |
11 |
(X/Y)*Z-W/(U+J)/K |
db |
dw |
db |
db |
db |
db |
dw |
12 |
((X+Y)/Z-W*U+J)/K |
db |
dw |
dw |
db |
dw |
db |
dw |
13 |
((X-Y-(Z-W)/U+J)*K |
dw |
dw |
dw |
db |
db |
db |
db |
14 |
X/Y-Z/W+U*J-K |
db |
dw |
dw |
db |
dw |
db |
dw |
15 |
X*Y+(Z-W)/(U+J)*K |
db |
db |
dw |
db |
dw |
db |
db |
16 |
(X-Y)*(Z-W)/U+J*K |
dw |
dw |
dw |
db |
dw |
db |
dw |
17 |
X/Y-Z/W+U*J/K |
db |
dw |
dw |
dw |
dw |
db |
dw |
18 |
(X*Y/Z-W*U/J)*K |
dw |
dw |
dw |
db |
dw |
db |
dw |
19 |
X/Y*Z-W/U*J+K |
db |
dw |
dw |
db |
dw |
dw |
dw |
20 |
((X-Y)*Z-W*U-J)/K |
db |
dw |
dw |
db |
dw |
db |
dw |
21 |
((X+Y)*Z/W/U+J)*K |
dw |
dw |
dw |
db |
dw |
db |
dw |
22 |
((X-Y)*(Z-W)/U-J)/K |
db |
dw |
dw |
db |
dw |
db |
dw |
23 |
((X*Y/Z-(W-U)/J)*K |
dw |
dw |
dw |
db |
dw |
db |
dw |
24 |
(X-Y)*(Z-W/U+J)+K |
dw |
dw |
db |
dw |
dw |
db |
dw |
25 |
(X-Y+Z)*W-(U+J)*K |
db |
dw |
dw |
db |
dw |
db |
dw |
26 |
(X*Y/Z-W/U+J)*K |
dw |
dw |
dw |
db |
dw |
dw |
db |
27 |
((X+Y)/Z-W/(U+J))*K |
db |
dw |
dw |
db |
dw |
db |
dw |
29 |
(((X*Y)-Z/W)/U+J)*K |
db |
db |
dw |
db |
dw |
db |
dw |
30 |
((X-Y)*Z-W/U+J)*K |
db |
dw |
dw |
db |
dw |
db |
db |
Завдання 3. Для будь-якої задачі з лабораторної роботи №4 (арифметичні команди) підрахувати таблицю значень функції, якщо один з параметрів змінюється від –x/2 до x/2.