Короткі теоретичні зведення
Розрізняють власне логічні операції, бітові операції і зсув. Вони виробляються над бітами байта або слова, тому ще називаються побітовими (порозрядними). Логічні команди Логічне заперечення (NOT, ,) – змінює значення операнда на протилежне
Логічне множення (кон’юнкція, AND, , ) – результат завжди 0, якщо один з операндів дорівнює 0:
Логічне додавання (диз'юнкція, OR, +, ) – результат завжди 1, якщо один з операндів дорівнює 1:
Логічна функція “що виключає або” (“додавання по модулю 2”, XOR, ) – результат завжди 0, якщо обоє операнда рівні:
В асемблері логічні команди реалізують чотири основні операції математичної логіки (таблиця 1): • логічне заперечення (NOT); • логічне множення (AND, TEST); • логічне додавання (OR); • додавання по модулю 2 (XOR). Логічне заперечення — це операція одномісна (їй потрібний тільки один операнд), всі інші — двомісні. Для асемблера, як ми знаємо, поняття тип даних (у тім смислу, як це розуміється в алгоритмічних мовах) не існує. Тому побітові операції застосовуються відповідно до правил математичної логіки до кожного біта окремо, починаючи з молодшого біта і закінчуючи старшим бітом. Для двомісних команд (відповідно до загальноприйнятого в асемблері правилами) відбувається установка (або очищення) відповідних бітів регістра прапорів (+). Можливі сполучення операндів такі ж, як і приведені в таблиці 1. Команда not уміст регістра прапорів не змінює
Таблиця 1. - Логічні команди в асемблері.
У якості першого операнда використовують регістр мікропроцесора, за винятком сегментного, або комірка пам'яті. Другим операндом може бути регістр мікропроцесора, за винятком сегментного, комірка пам'яті або безпосереднє значення. Не допускається одночасне використання двох комірок пам'яті як операндів. <Джерело> у логічних командах із двома операндами звичайно іменується маска. Звідси і термін маскування розрядів. Значення маски звичайно беруть або в двійковому, або в шістнадцятирічнім виді. Воно (значення) означає, що у відповідному біті встановлена одиниця (див. табл. 2), відповідно до малюнка 1.
Рисунок 1. – Формування маски Таблиця 2. - Шістнадцятирічні маски
Увага. Логічні команди не мають нічого спільного (у смислі десяткового результату) зі звичними для людини арифметичними операціями. Інтерпретація результату — справа людини, а не комп'ютера (для нього рідними є тільки двійкові числа!). 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 Це досить проста команда, що не має особливостей, а просто змінює значення кожного біта на протилежне Команди зсуву Це — інший різновид побітових команд, що переміщають (зрушують) біти в полі операнда приймач, або вліво (Left), або вправо (Right) на визначене число розрядів — це значення зберігається в джерелі. Тому в мнемоніці цих команд обов'язково присутня буква L або R. Усі команди зсувів складаються з двох операндів. Команди зсувів за принципом дії розділяються на лінійні (арифметичні і логічні зсуви) і циклічні зсуви. Лінійні команди зсуву додають нуль або в молодший (нульовий) розряд (при зсуві вліво — L), або — у старший (при зсуві вправо — R). Причому старший розряд при зсуві вправо розрізняється для знакових і беззнакових даних. Зсув для знакових даних називається арифметичним, а для беззнакових — логічним. Розряди, що видаляються з операнда, послідовно вміщуються в біт CF регістра прапорів. Ці команди дозволяють дуже швидко виконувати ділення (при зсуві вправо — R) і множення (при зсуві вліво — L) операнда на ступені двійки. Усі команди зсувів складаються з двох операндів. Усі команди зсувів і циклічних зсувів використовують прапори переносу CF і переповнення OF. При виконанні команд зсувів прапор CF завжди містить значення останнього висунутого біта: • shr — логічний (беззнаковий) зсув вправо; • shl — логічний (беззнаковий) зсув вліво; • shld — логічний зсув подвійного слова вліво; • shrd — логічний зсув подвійного слова вправо; • sal — арифметичний зсув вліво; • sar — арифметичний зсув вправо. Циклічне зсув являє собою операцію зсув, при якій висунутий біт займає розряд, що звільнився:
• ror — циклічний зсув вправо; • rol — циклічний зсув вліво; • rcr — циклічний зсув вправо з переносом; • rcl — циклічний зсув вліво з переносом. Таблиця 3. - Можливі сполучення операндів для команд зсувів.
Як було підкреслено раніше, зсув вліво часто використовується для множення числа на ступінь двійки, а зсув вправо — для ділення на ступінь двійки. Такі операції виконуються значно швидше, ніж звичайні команди множення або ділення. При діленні навпіл непарних чисел результатом стають значення, округлені в меншу сторону. Наприклад, ділення чисел 5 або 7 на 2 дає результат 2 і 3 відповідно, і, крім цього, прапор CF встановлюється в 1. Більш того, при виконанні, наприклад, зсуву на 2 біти більш ефективним є використання двох команд зсуву, а не однієї команди з попереднім завантаженням регістра CL значенням 2. Для перевірки біта переносу (прапора CF) по закінченні операції можна виконати команду jc. Логіка роботи команд зсув приведена на рисунках 2-9. Рисунок 2 - Логіка роботи команди арифметичного зсув вліво sal Рисунок 3 - Логіка роботи команди арифметичного зсув вправо sar Рисунок 4 - Логіка роботи команди логічного зсув вліво shl Рисунок 5 - Логіка роботи команди логічного зсув вліво shr Рисунок 6.- Логіка роботи команди простого циклічного зсув вліво rol Рисунок 7- Логіка роботи команди простого циклічного зсув вправо ror Рисунок 8.- Логіка роботи команди циклічного зсув вліво rcl — через біт CF Рисунок 9.- Логіка роботи команди циклічного зсув вліво rcr — через біт CF
Читайте также: Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|