Команди логічних операцій
Група команд логічних операцій об’єднує команди логічних операцій І, АБО і ВИКЛЮЧАЮЧЕ АБО, а також команди маніпулювання з акумулятором: інверсія, обнуління, зсуви через перенос, циклічні зсуви і обміну тетрадами (всього 25 команд розміщених в таблиці 8.16).
На відміну від арифметичних функцій команди логічних функцій можуть здійснюватись без участі акумулятора, а їх результат може бути сформований у будь-якій комірці внутрішнього ОЗП, пряма адреса якої вказується в команді. Це важливий інструмент для маскування операндів при роботі з портами.
Приклади використання команд логічних функцій подано нижче.
ANL P2,#10111010 B
| ; Обнуління бітів 0,2,6 порту 2
|
ORL P1,#00001111 B
| ; Установити біти 0-3 порту 1
|
ANL PSW,#11100111 B
| ; Вибір нульового банку (обнулити біти RS1 i;RS0)
|
XRL P1,A
| ; Проінвертувати біти порту Р1, що відповідають
; одиничним бітам акумулятора
|
XRL A,#OF H
| ; Проінвертувати біти 0-3 акумулятора
|
XRL P0,#11100000 B
| ; Проінвертувати біти 7,6,5 порту Р0
|
МК 51 має чотири команди зсувів, дія яких показується на рисунку 8.10.
Рисунок 8.10- Дія команди зсувів: а)через перенос - RLC, RRC;
б) циклічний зсув -RL, RR.
Таблиця 8.16- Група команд логічних операцій
Назва команди
| Мнемокод
| КОП
| Т
| В
| Ц
| Операція
|
Логічне І акумулятора і регістра
| ANL A, Rn
| 01011iii
|
|
|
| (A) (A) (Rn)
|
Логічне І акумулятора і прямоадресованого байта
| ANL A, ad
|
|
|
|
| (A) (A) (ad)
|
Логічне І акумулятора і байта з РПД
| ANL A,@Ri
| 0101011i
|
|
|
| (A) (A) ((Ri))
|
Логічне І акумулятора і константи
| ANL A, #d
|
|
|
|
| (A) (A) #d
|
Логічне І прямоадресованого байта і акумулятора
| ANL ad, A
|
|
|
|
| (ad) (ad) (A)
|
Логічне І прямоадресованого байта і константи
| ANL ad, #d
|
|
|
|
| (ad) (ad) #d
|
Логічне АБО акумулятора і регістра
| ORL A, Rn
| 01001iii
|
|
|
| (A) (A) (Rn)
|
Логічне АБО акумулятора і прямоадресованого байта
| ORL A, ad
|
|
|
|
| (A) (A) (ad)
|
Логічне АБО акумулятора і байта з РПД
| ORL A,@Ri
| 0100011i
|
|
|
| (A) (A) ((Ri))
|
Логічне АБО акумулятора і константи
| ORL A,#d
|
|
|
|
| (A) (A) #d
|
Логічне АБО прямоадресованого байта і акумулятора
| ORL ad, A
|
|
|
|
| (ad) (ad) (A)
|
Логічне АБО прямоадресованого байта і константи
| ORL ad, #d
|
|
|
|
| (ad) (ad) #d
|
Виключаюче АБО акумулятора і регістра
| XRL A, Rn
| 01101iii
|
|
|
| (A) (A) (Rn)
|
Виключаюче АБО акумулятора і прямоадресованого байта
| XRL A, ad
|
|
|
|
| (A) (A) (ad)
|
Виключаюче АБО акумулятора і байта з РПД
| XRL A,@Ri
| 0110011i
|
|
|
| (A) (A) ((Ri))
|
Виключаюче АБО акумулятора і константи
| XRL A, #d
|
|
|
|
| (A) (A) #d
|
Виключаюче АБО прямоадресованого байта і акумулятора
| XRL ad, A
|
|
|
|
| (ad) (ad) (A)
|
Виключаюче АБО прямоадресованого байта і константи
| XRL ad, #d
|
|
|
|
| (ad) (ad) #d
|
Обнуління акумулятора
| CLR A
|
|
|
|
| (A) 0
|
Інверсія акумулятора
| CPL A
|
|
|
|
| (A) (A)
|
Зсув акумулятора вліво циклічний
| RL A
|
|
|
|
| (An+1) (An)
n=0 6
(A0) (A7)
|
Зсув акумулятора вліво через перенос
| RLC A
|
|
|
|
| (An+1) (An)
n=0 6
(A0) (C), (C) (A7)
|
Зсув акумулятора вправо циклічний
| RR A
|
|
|
|
| (An) (An+1)
n=0 6
(A7) (A0)
|
Зсув акумулятора вправо через перенос
| RRC A
|
|
|
|
| (An) (An+1) n=0 6
(A7) (C), (C) (A0)
|
Обмін місцями тетрад в акумуляторі
| SWAP A
|
|
|
|
| (A0-3) (A4-7)
|
Зрозуміло, що команди RLC i RRC діють на індикатор переносу С.
Команди зсувів (RLC i RRC) особливо корисні при множенні і діленні числа, що знаходиться в акумуляторі, на числа кратні 2, оскільки процедура реалізується через зсув вмісту акумулятора відповідно вправо або вліво на необхідну кількість розрядів. Очевидно, що біт С перед зсувом щоразу потрібно обнулювати. Обидва типи зсувів можна застосовувати для тестування окремих бітів акумулятора.
Команда SWAP забезпечує обмін тетрадами в акумуляторі шляхом циклічного зсуву вправо 4 рази. Дана команда не діє на індикатор С.
Читайте также:
Воспользуйтесь поиском по сайту: