Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МПТ.doc
Скачиваний:
65
Добавлен:
03.11.2018
Размер:
20.52 Mб
Скачать

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

Група команд логічних операцій об’єднує команди логічних операцій І, АБО і ВИКЛЮЧАЮЧЕ АБО, а також команди маніпулювання з акумулятором: інверсія, обнуління, зсуви через перенос, циклічні зсуви і обміну тетрадами (всього 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

1

1

1

(A)(A) (Rn)

Логічне І акумулятора і прямоадресованого байта

ANL A, ad

01010101

3

2

1

(A)(A) (ad)

Логічне І акумулятора і байта з РПД

ANL A,@Ri

0101011i

1

1

1

(A)(A) ((Ri))

Логічне І акумулятора і константи

ANL A, #d

01010100

2

2

1

(A)(A) #d

Логічне І прямоадресованого байта і акумулятора

ANL ad, A

01010010

3

2

1

(ad)(ad) (A)

Логічне І прямоадресованого байта і константи

ANL ad, #d

01010011

7

3

2

(ad)(ad) #d

Логічне АБО акумулятора і регістра

ORL A, Rn

01001iii

1

1

1

(A)(A) (Rn)

Логічне АБО акумулятора і прямоадресованого байта

ORL A, ad

01000101

3

2

1

(A)(A) (ad)

Логічне АБО акумулятора і байта з РПД

ORL A,@Ri

0100011i

1

1

1

(A)(A) ((Ri))

Логічне АБО акумулятора і константи

ORL A,#d

01000100

2

2

1

(A)(A) #d

Логічне АБО прямоадресованого байта і акумулятора

ORL ad, A

01000010

3

2

1

(ad)(ad) (A)

Логічне АБО прямоадресованого байта і константи

ORL ad, #d

01000011

7

3

2

(ad)(ad) #d

Виключаюче АБО акумулятора і регістра

XRL A, Rn

01101iii

1

1

1

(A)(A) (Rn)

Виключаюче АБО акумулятора і прямоадресованого байта

XRL A, ad

01100101

3

2

1

(A)(A) (ad)

Виключаюче АБО акумулятора і байта з РПД

XRL A,@Ri

0110011i

1

1

1

(A)(A) ((Ri))

Виключаюче АБО акумулятора і константи

XRL A, #d

01100100

2

2

1

(A)(A) #d

Виключаюче АБО прямоадресованого байта і акумулятора

XRL ad, A

01100010

3

2

1

(ad)(ad) (A)

Виключаюче АБО прямоадресованого байта і константи

XRL ad, #d

01100011

7

3

2

(ad)(ad) #d

Обнуління акумулятора

CLR A

11100100

1

1

1

(A)0

Інверсія акумулятора

CPL A

11110100

1

1

1

(A)(A)

Зсув акумулятора вліво циклічний

RL A

00100011

1

1

1

(An+1)(An)

n=06

(A0)(A7)

Зсув акумулятора вліво через перенос

RLC A

00110011

1

1

1

(An+1)(An)

n=06

(A0)(C), (C)(A7)

Зсув акумулятора вправо циклічний

RR A

00000011

1

1

1

(An)(An+1)

n=06

(A7)(A0)

Зсув акумулятора вправо через перенос

RRC A

00010011

1

1

1

(An)(An+1) n=06

(A7)(C), (C)(A0)

Обмін місцями тетрад в акумуляторі

SWAP A

11000100

1

1

1

(A0-3)(A4-7)

Зрозуміло, що команди RLC i RRC діють на індикатор переносу С.

Команди зсувів (RLC i RRC) особливо корисні при множенні і діленні числа, що знаходиться в акумуляторі, на числа кратні 2, оскільки процедура реалізується через зсув вмісту акумулятора відповідно вправо або вліво на необхідну кількість розрядів. Очевидно, що біт С перед зсувом щоразу потрібно обнулювати. Обидва типи зсувів можна застосовувати для тестування окремих бітів акумулятора.

Команда SWAP забезпечує обмін тетрадами в акумуляторі шляхом циклічного зсуву вправо 4 рази. Дана команда не діє на індикатор С.