logo
Metodichka_Modul_6_red

Результати виконання логічних операцій

оr (или)

and (и)

eor (исключ. или)

Вход

Выход

Вход

Выход

Вход

Выход

А

В

Q

A

B

Q

А

В

Q

0

0

0

0

0

0

0

0

0

0

1

1

0

1

0

0

1

1

1

0

1

1

0

0

1

0

1

1

1

1

1

1

1

1

1

0

Вищезазначені команди використовуються для виконання операцій порозрядного маскування: or – для встановлення одиниць у заданих розрядах, and – для встановлення нулів, еor – для знаходження співпадаючих значень бітів першого операнду з маскою. Команди змінюють флагу нуля Z, знака N та переповнення V. Приклади порозрядних логічних операцій, що іллюструють використання механізму маскування, приведені в Таб. 1.2.

Таблиця 1.2 Приклади порозрядних логічних операцій

Пример поразрядного маскирования or

Пример поразрядного маскирования and

Пример поразрядного маскирования eor

Rd

хххххххх

Rd

хххххххх

Rd

10100110

Rs

00010010

Rs

10110101

Rs

00010010

Rd=Rd or Rs

ххх1хх1х

Rd=Rd and Rs

х0хх0х0х

Rd=Rd eor Rs

10110100

Команда порозрядного інвертування:

com R логічне заперечення; дія: R = 0b11111111 – R,

виконує зміну значень двійкових розрядів операнду (регістр загального призначення) на протилежні.

Приклад:

com R3 дія: R3 = 0b11111111 – R3.

Команди для роботи з бітами. Доповнюють сукупність логічних операцій команди скидання, встановлення та перевірки значень окремих бітів.

Команди скидання cbi P, n та встановлення sbi P, n бітів призначені для присвоювання значень 0 та 1 окремим бітам портів введення/виведення відповідно. Першим операндом в цих командах є адреса порту введення/виведення, а другим – номер біту (від 0 до 7).

Приклади:

cbi 0x17, 5 дія: 0x175 = 0;

sbi 0x40, 1 дія: 0x401 = 1.

Команда логічного зсуву lsl R виконує зсув ліворуч на одну позицію усіх бітів операнда, а в молодший розряд додає нуль. Старший біт операнду поступає у прапор переносу С. У якості операнда можуть використовуватись тільки регістри загального призначення. Команда lsr R виконує зсув праворуч на одну позицію усіх бітів операнда, а в старший розряд додає нуль. Молодший біт операнду поступає у прапор переносу С. Приклади використання команд логічного зсуву:

lsl R17 логічний зсув ліворуч усіх розрядів у R17;

lsr R9 логічний зсув праворуч усіх розрядів у R9.

Змінити місцями молодшу та старшу тетради байту, завантаженого до регістру загального призначення, можливо за допомогою команди swap R. Наступний фрагмент ілюструє дію команди swap:

ldi R19, 0b01001101 завантаження константу 0b01001101 до регістру R19;

swap R19 в результаті виконання команди swap у регістрі R19 буде записане значення 0b11010100.

Доповнюють перелік команд для роботи з бітами інструкції для скидання/встановлення значень прапорових розрядів у регістрі статусу SREG.

Команди порівняння, умовного та безумовного переходів. Команда порівняння cp Rd, Rs – здійснює дію Rd–Rs та встановлює прапори нуля Z, від’ємного результату N, переповнення V, переносу С та додаткового переносу H. Результат не зберігається за адресою першого операнду, а лише формуються прапори. Операндами можуть бути лише регістри загального призначення.

Команди умовного переходу викликаються одразу після команд порівняння (або других інструкцій, що викликають зміну бітів регістру стану SREG) та на підставі аналізу прапорів здійснюється перехід за вказаною адресою (до мітки) у пам’яті команд.

Найбільш розповсюдженими серед команд цієї групи є:

breq M перехід до М, якщо дорівнює;

brne M перехід до М, якщо не дорівнює;

brlo M перехід до М, якщо менше;

brsh M перехід до М, якщо більше або дорівнює.

Приклад спільного використання команд порівняння та умовного переходу:

cp R1, R5 порівняння значеннь у регістрах R1 и R5;

breq lbl1 виконання переходу на мітку lbl1, якщо значення регістрах R1 та R5 однакові (R1–R5=0).

Команда rjmp М здійснює безумовний перехід за вказаною 8-разрядною міткою у пам’яті команд. Приклад:

rjmp lbl2 безумовний перехід до мітки lbl2.

Команда jmp М здійснює безумовний перехід за вказаною адресою (до мітки, label) у пам’яті команд. Приклад:

rjmp lbl3 безумовний перехід до мітки lbl3.[ii]