- •Лабораторна робота 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.2. Операції із прапорами процесора:
clc установка CF=0
cld установка DF=0
cli установка IF=0
lahf завантаження регістра AH з регістра прапорів: установлюють біти 7, 6, 4, 2 і 0 за значеннями прапорів SF ZF AF PF CF.
sahf запис регістра AH у регістр прапорів: установлює прапори SF ZF AF PF CF по битках 7, 6, 4, 2 і 0 регістри AH.
stc установка CF=1
std установка DF=1
sti установка IF=1
3.3 Команди розповсюдження знаку
Для знакових даних існують команди розповсюдження знака застосовуються при вирівнюванні операндів по довжині. Інструкції перетворення типів конвертують байти в слова, слова в подвійні слова і подвійні слова в четверні слова. Ці перетворення можна зробити, використовуючи знакове або нульове розширення. Знакове розширення заповнюють додаткові біти більшого операнда значенням біта знака меншого операнда, нульове розширення просто забиває їх нулями.
cwd і cdq подвоюють розмір регістра АХ або ЕАХ відповідно і зберігає додаткові біти в регістр DX або EDX. Перетворення робиться, використовуючи знакове розширення. Ці інструкції не мають операндів.
cbw розтягує знак байта AL по регістрі АХ.
cwde розтягує знак слова АХ на ЕАХ. Ці інструкції також не мають операндів.
movsx destination, source
перетворить байт у слово або в подвійне слово і слово в подвійне слово, використовуючи знакове розширення.
movzx destination, source
робить те ж саме, але використовуючи нульове розширення. Операндом-джерелом може бути регістр загального призначення або пам'ять, тоді як операндом-адресатом повинний бути регістр загального призначення. Наприклад:
movsx ax, al ; байт у слово
movsx edx, dl ; байт у подвійне слово
movsx eax, ax ; слово в подвійне слово
movsx ax, byte [bx]; байт пам'яті в слово
movsx edx, byte [bx]; байт пам'яті в подвійне слово
movsx eax, word [bx]; слово пам'яті в подвійне слово
Примітка. При введенні – виведенні даних у програмах на С++ обов'язково указується формат числа, див. л. р.№2. Нижче приведені модифікатори формату і відповідні їм директиви визначення даних в асемблері.
Таблиця 1 - Типи даних С++ та відповідні їм директиви визначення данихна асемблері
Тип даних С++ |
Розмір (байт) |
Директива |
bool |
1 |
db |
char, unsigned char, signed char |
1 |
db |
short, unsigned short |
2 |
dw |
int, unsigned int |
4 |
dd |
__intn |
1, 2, 4, 8 у залежності від n. __intn це специфікація Microsoft. |
db, dw, dd, dq |
long, unsigned long |
4 |
dd |
float |
4 |
dd |
double |
8 s |
dq |
long double |
8 |
dq |
long long |
Еквівалентно __int64. |
|
Microsoft Visual C++ розпізнає наступні типи даних, що наведені у таблиці 2, включно із діапазоном значень.
Таблиця 2 – Типи даних Microsoft Visual С++
Тип |
Кількість байт |
Псевдоніми |
Діапазон значень |
int |
* |
signed, signed int |
Залежить від платформи (системи) |
unsigned int |
* |
unsigned |
Залежить від платформи (системи) |
bool |
1 |
- |
false або true |
char |
1 |
signed char |
–128.. 127 |
unsigned char |
1 |
- |
0.. 255 |
short |
2 |
short int, signed short int |
–32 768.. 32 767 |
unsigned short |
2 |
unsigned short int |
0.. 65 535 |
long |
4 |
long int, signed long int |
–2 147 483 648.. 2 147 483 647 |
long long |
8 |
- (еквіалентно __int64) |
–9 223 372 036 854 775 808.. 9 223 372 036 854 775 807 |
unsigned long |
4 |
unsigned long int |
0.. 4 294 967 295 |
enum |
* |
- |
теж саме, що int |
float |
4 |
- |
3.4E +/- 38 (7 digits) |
double |
8 |
- |
1.7E +/- 308 (15 digits) |
long double |
теж саме, що double |
- |
теж саме, що double |
wchar_t |
2 |
__wchar_t |
0.. 65 535 |
__int8 |
1 |
char, signed char |
–128.. 127 |
__int16 |
2 |
short, short int, signed short int |
–32 768.. 32 767 |
__int32 |
4 |
signed, signed int |
–2 147 483 648.. 2 147 483 647 |
__int64 |
8 |
- |
–9 223 372 036 854 775 808.. 9 223 372 036 854 775 807 |
При використанні scanf (printf) використовують наступні типи даних та їх специфікатори.
Таблиця 3 – Типи даних С++ та специфікатори
Формат |
Префікс |
Специфікатор із яким використовується |
double |
l |
e, E, f, g, or G |
long double (як double) |
L |
e, E, f, g, or G |
long int |
l |
d, i, o, x, or X |
long unsigned int |
l |
u |
short int |
h |
d, i, o, x, or X |
short unsigned int |
h |
u |
__int64 |
I64 |
d, i, o, u, x, or X |
Простий байт scanf |
h |
c or C |
Розширений байт scanf |
l |
c or C |
Рядок символів scanf |
h |
s or S |
Рядок розширених символів scanf |
l |
s or S |
Примітка: h, l, I64, and L are Microsoft extensions and are not ANSI compatible |
Розшифровка специфікаторів відносно до логічних типів даних наведено у таблиці 4
Таблиця 4 – Специфікатори із зазначенням типів даних
Символ |
Типи даних |
d |
Десяткове ціле. |
i |
Десяткове, шістнадцятирічне, вісімкове ціле. |
o |
Вісімкове ціле. |
u |
Беззнакове десяткове ціле. |
x |
Шістнадцятирічне ціле. |
e, E, f, g, G |
Дійсне (floating-point) включаючи знак (+, –), послідовність десяткових розрядів із десятковою крапкою, символ експоненти (“e” or “E”) та покажчик ступеню. |
n |
No input read from stream or buffer. |
s (S) |
Строка до першого символу space, tab, newline. Для читання символів, що необмежені означеними символами слід використовувати квадратні дужки ([]). |
c (С) |
При використанні scanf визначає простий байт; при використанні wscanf визначає розширений байт. (розширені символи читаються за допомогою C) Для читання наступного простого байту використовується %1s; розширеного - %1ws. |