Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_1-3.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
998 Кб
Скачать
☆

1.4. Команди логічних операцій

Як відомо, логічні операції є важливим елементом в проектуванні цифрових електронних схем. Але двійкова логіка має також багато спільного із логікою програмування. Наприклад, всі арифметичні операції здійснюються на апаратному рівні як послідовність великого числа логічних операцій [1,4]. Крім того, команди логічних операцій знаходять широке використання для моделювання логіки роботи цифрових схем, для здійснення арифметичних операцій з кодами ASCII, для накладення масок (виділення окремих біт числа), а також для організування логіки програми. В мові програмування асемблер підтримується шість головних команд для виконання логічних операцій: AND, OR, XOR, NOT та TEST.

Ці команди обробляють один байт або одне слово в регістрі або в комірці пам’яті. Встановлюють прапори: CF (прапор переносу), OF (прапор переповнення), PF (прапор парності), SF (прапор знака), ZF (прапор нуля). Працюють команди логічних операцій наступним чином:

AND - якщо обидва біта, що зрівнюються, дорівнюють 1, то результат дорівнює 1, а в іншому випадку 0 (команду AND називають також логічним множенням).

OR - якщо хоча б один з бітів, що зрівнюється, дорівнює 1, то результат теж дорівнює 1, а в іншому випадку 0 (команду OR називають також логічним діленням).

XOR - якщо біти, що зрівнюються, співпадають, то результат дорівнює 0, а якщо різняться - 1.

NOT - команда має один операнд та здійснює інверсію всіх бітів числа.

TEST - працює як команда AND, але тільки змінює прапори стану, не впливаючи на результат. Може бути використана для перевірки окремих байтів числа на наявність одиниць.

Приклади виконання логічних команд наведені в табл. 13:

Таблиця 13. Приклади виконання логічних команд

Команда

AND

OR

XOR

NOT

Перше число

10100101

10100101

10100101

10100101

Друге число

10010011

10010011

10010011

-

Результат

10000001

10110111

00110110

01011010

Формат логічних команд такий же самий, як і арифметичних:

{позначка} [код команди] [операнд-приймач], [операнд-джерело]

Завдання для перевірки №8: Наведіть свої приклади логічних команд. Напишіть на мові асемблера фрагмент програми, який містить логічні команди, та визначте, яким буде результат виконання цього фрагменту програми. Результат роботи покажіть викладачеві.

1.5. Команди зсуву бітів числа

В мові асемблер існує чотири команди зсуву бітів - SAR, SAL, SHR та SHL. Зсув може здійснюватись праворуч або ліворуч на 8 позицій для байта або на 16 для слова. Команда містить 2 операнди - регістр або комірку пам’яті, де міститься байт або слово, які треба обробити, та вказівник на кількість позицій зсуву. Зсув на одну позицію може бути вказаний безпосередньо, а для зсуву на дві позиції або більше треба вказати кількість позицій у регістрі CL.

Таким чином, формат команд зсуву у мові програмування асемблер такий:

{позначка} [код команди] [операнд1], [операнд2]

На відміну від попередніх команд з двома операндами тут перший операнд є водночас і джерелом, і приймачем, тобто число, над яким проводиться зсув, змінюється безпосередньо у тій комірці пам’яті або регістрі, куди воно було завантажене. Зрозуміло, що само число при такий операції втрачається. Другим операндом команди зсуву може бути або безпосередньо число 1, або регістр CL.

Команда SHR визначає логічний зсув праворуч без урахування знака, а команда SAR - арифметичний зсув праворуч з урахуванням знака. Ризниця між цими командами полягає у тому, що для заповнення старшого байта при виконанні команди SHR використовується нуль, а в команді SAR - біт знака.

Приклади використання команд SAR та SHR наведені у таблиці 14.

Таблиця 14. Приклади використання команд арифметичного та логічного зсуву

Приклад 1

Приклад 2

Асемблерна команда

Результат її виконання

Асемблерна команда

Результат її виконання

MOV CL,3

MOV AX,10110111B

SHR AX,1

SHR AX,CL

CL=3

AX=10110111B

AX=01011011B

AX=00001011B

MOV CL,3

MOV AX,10110111B

SAR AX,1

SAR AX,CL

CL=3

AX=10110111B

AX=11011011B

AX=11111011B

Оскільки при зсуві ліворуч молодші біти числа завжди замінюються нулями, результат виконання команд SAL та SHL завжди буде однаковим.

Важливим при виконанні команд арифметичного та логічного зсуву є те, що біт, який звільнюється, переходить до прапору перенесення. Це дає можливість ефективно використовувати ці команди для множення та ділення чисел на два.

Завдання для перевірки №9: Напишіть фрагмент асемблерної програми з використанням команди SHL та проаналізуйте результат їх виконання таким же чином, як це зроблено у наведеному прикладі для команд SAR та SHR.

Завдання для перевірки №10: Покажіть, що команди зсуву можуть бути використані для множення або ділення числа на два.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]