- •1.4. Вимоги до структури програм
- •1.5. Вимоги до стилю програм мовою Асемблера
- •1.6 Огляд операцій, які рекомендуються на друге заняття.
- •1.7. Завдання на виконання лабораторної роботи Перше заняття
- •Друге заняття
- •1.8. Контрольні запитання
- •Додаток а Довідник користувача макроасемблера masm та редактора зв'язків link
- •Запуск редактора зв'язків link.
- •Загальна характеристика налагоджувача
- •Запуск afd
- •Опис основних процедур
- •Завантаження програми для надагоджування.
- •Визначення початкової адреси дизасемблювання
- •Команда g (виконати)
- •Формування файлу дизасембльованого коду
- •Використання вбудованого асемблера
- •Використання функціональних клавіш
- •Завершення роботи та повернення в операційну систему
1.5. Вимоги до стилю програм мовою Асемблера
Мова Асемблера не накладає вимог щодо прив’язки полів до конкретних позицій рядка. Все ж таки грамотним вважається дотримання одного й того ж розташування полів протягом всієї програми і використання достатньої кількості пробілів між ними для розділу.
Мітки машинних інструкцій доцільно розміщувати в окремих рядках. Крім наочності, це сприяє спрощенню редагування початкових програм.
Якщо наступна після команди передачі управління інструкція програми мітки не має, доцільно вставити перед нею порожній рядок. Це дозволяє наочно виділити частини програм з послідовним виконанням команд.
Мова Асемблера допускає довільне розміщення логічних сегментів у початковій програмі. Між тим рекомендується наступний (за аналогією з програмами мовами високого рівня) порядок: спочатку розміщуються сегменти даних, а потім – сегменти кодів.
Необхідно не лінуватися робити змістовні коментарі, що пояснюють реалізований алгоритм, оскільки зрозуміти алгоритм програми мовою Асемблера значно важче, ніж алгоритм програми мовою високого рівня.
1.6 Огляд операцій, які рекомендуються на друге заняття.
Порозрядна логічна інверсія. Найуживаніше символічне позначення NOT. При виконанні цієї операції значення кожного розряду даних змінюється на протилежний, наприклад
NOT |
||||||||
|
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
= |
||||||||
|
1 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
Порозрядне логічне множення (AND). Операція виконується над двома операндами однакової довжини, часто її позначають символом (Z=XY). Визначення операції для довільного розряду i (xi yi) подано в Табл. 1.1
Таблиця 1.1
yi xi |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
Завдяки наступним властивостям операції - х0=0, х1=х, хх=х вона застосовується в програмуванні для виділення та очищення (занесення 0-вих значень) окремих розрядів.
Наприклад, необхідно в 8-розрядних даних виділить п'ятий, другий та перший розряд, тоді
|
x7 |
x6 |
x5 |
x4 |
x3 |
x2 |
x1 |
x0 |
|
x7 |
x6 |
x5 |
x4 |
x3 |
x2 |
x1 |
x0 |
AND |
||||||||
|
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
= |
||||||||
|
0 |
0 |
x5 |
0 |
0 |
x2 |
x1 |
0 |
В розглянутому прикладі очищені 7,6,4,3 та 0-вий розряди.
Порозрядне логічне АБО (OR). Операція виконується над двома операндами однакової довжини, часто її позначають символом (Z=XY). Визначення операції для довільного розряду i (xi yi) подано в Табл. 1.2
Таблиця 1.2
yi xi |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
Завдяки наступним властивостям операції - х0=х, хх=х, х1=1,
вона застосовується в програмуванні для об'єднання розрядів та установлення (занесення 1) окремих розрядів
Приклад об'єднання розрядів
|
y7 |
0 |
y5 |
0 |
0 |
0 |
y1 |
y0 |
OR |
||||||||
|
0 |
x6 |
0 |
x4 |
x3 |
x2 |
0 |
0 |
= |
||||||||
|
y7 |
x6 |
y5 |
x4 |
x3 |
x2 |
y1 |
y0 |
Приклад установлення розрядів
|
x7 |
x6 |
x5 |
x4 |
x3 |
x2 |
x1 |
x0 |
OR |
||||||||
|
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
= |
||||||||
|
x7 |
x6 |
1 |
x4 |
x3 |
1 |
1 |
x0 |
Порозрядна сума по модулю два (XOR). Операція виконується над двома операндами однакової довжини, часто її позначають символом (Z=XY). Визначення операції для довільного розряду i (xi yi) подано в Табл. 1.3
Таблиця 1.3
yi xi |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
Операція XOR має наступні властивості - х0=х, хх=0, х1=NOT x.
Операція XOR може бути використана для інверсії окремих розрядів, наприклад
|
x7 |
x6 |
x5 |
x4 |
x3 |
x2 |
x1 |
x0 |
XOR |
||||||||
|
0 |
0 |
0 |
1 |
1 |
1 |
0 |
00 |
= |
||||||||
|
x7 |
x6 |
x5 |
NOT x4 |
NOT x3 |
NOT x2 |
x1 |
x0 |
Властивість хх=0 часто використовують для очищення (занесення значення 0 в усі розряди) регістру або комірок пам’яті Наприклад, команди xor eax,eax та mov eax,0 обидві заносять в регістр EAX нульове значення, але команда xor займає в ОЗП дві комірки, а команда mov - п'ять комірок.
Операції зсуву
Лінійний зсув вліво (SHift Left - SHL) на один розряд. В даній операції значення розряду даних заміщується значенням попереднього молодшого розряду. При цьому значення самого старшого розряду даних втрачається (в відповідних командах ЕОМ значення старшого розряду записується в ознаку переносу в регістрі ознак), а в самий молодший розряд записується 0, наприклад
SHL |
||||||||
|
x7 |
x6 |
x5 |
x4 |
x3 |
x2 |
x1 |
x0 |
= |
||||||||
|
x6 |
x5 |
x4 |
x3 |
x2 |
x1 |
x0 |
0 |
Лінійний зсув вправо (SHift Right - SHR). В даній операції значення розряду даних заміщується значенням попереднього старшого розряду. При цьому значення самого молодшого розряду даних втрачається (в відповідних командах ЕОМ значення самого молодшого розряду записується в ознаку переносу в регістрі ознак), а в самий старший розряд записується 0, наприклад
SHR |
||||||||
x7 |
x6 |
x5 |
x4 |
x3 |
x2 |
x1 |
x0 |
|
= |
||||||||
0 |
x7 |
x6 |
x5 |
x4 |
x3 |
x2 |
x1 |
|
Зсув на декілька розрядів можна розглядати як послідовність зсувів на один розряд.
