- •Лабораторная работа № 8 Логические команды
- •Цель работы
- •2.Основные теоретические сведения
- •3. Порядок выполнения работы
- •3.1. Исследование логических команд
- •3.1.1. Команды логического умножения
- •3.1.2 Команды логического сложения
- •3.1.3. Команды Исключающего или
- •3.1.4. Команды инверсии, обмена тетрад и сброса аккумулятора
- •3.1.5. Применение логических команд для переключения банков регистров
- •3.1.6. Задания для самостоятельной работы
- •4.Содержание отчета
- •Контрольные вопросы
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ
ГОМЕЛЬСКИЙ ГОСУДАРСТВЕННЫЙ ДОРОЖНО-СТРОИТЕЛЬНЫЙ КОЛЛЕДЖ имени Ленинского комсомола
Методические указания по выполнению лабораторных работ по дисциплине «ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ»
Лабораторная работа № 8 Логические команды
ГГДСК Гомель 2011
Цель работы
Изучить и практически исследовать работу логических команд однокристальных микроконтроллеров семейства MCS-51 (МК51) на персональном компьютере.
2.Основные теоретические сведения
К группе логических команд микроконтроллеров семейства МК51 относят команды, выполняющие операции алгебры логики (И, ИЛИ, исключающее ИЛИ, НЕ), команды сдвига, а также команды обмена тетрад в аккумуляторе и его очистки (сброса).
Команды логического умножения реализуют поразрядную логическую операцию И (конъюнкцию). Результат операции равен 1, если оба соответствующих бита равны 1, и равен 0, если хотя бы один из них равен нулю. Например
1 0 1 0 1 0 0 1
AND
0 0 1 1 0 0 1 0
––––––––––––––––
0 0 1 0 0 0 0 0,
где AND – обозначение логической операции И.
Команды логического сложения реализуют поразрядную логическую операцию ИЛИ (дизъюнкцию). Результат операции равен 1, если хотя бы один из соответствующих битов равен 1, и равен 0, если оба равны нулю. Например
1 0 1 0 1 0 0 1 .
OR
0 0 1 1 0 0 1 0
------------------------
1 0 1 1 1 0 1 1 ,
где OR – обозначение логической операции ИЛИ.
Команды Исключающего ИЛИ реализуют поразрядную логическую операцию Исключающее ИЛИ, которая иногда называется сложением по модулю два. Результат операции равен 1, если соответствующие биты противоположны (1 и 0), и равен 0, если они одинаковы (1 и 1, 0 и 0). Например
1 0 1 0 1 0 0 1
XOR
0 0 1 1 0 0 1 0
------------------------
1 0 0 1 1 0 1 1,
где XOR – обозначение логической операции Исключающее ИЛИ.
Команда логического отрицания реализует логическую операцию НЕ (инверсия, обращение). Она производит поразрядное инвертирование битов. Например
1 0 1 0 1 0 0 1
NOT
------------------------
0 1 0 1 0 1 1 0,
где NOT – обозначение логической операции НЕ (инверсии).
В МК51 имеются следующие команды логических операций
ANL A, Rn ; (A) (A) (Rn) - Логическое И аккумулятора и регистра
ANL A, ad ; (A) (A) (ad) - Логическое И аккумулятора и прямоадресуемого байта
ANL A, @Ri ; (A) (A) ((Ri)) - Логическое И аккумулятора и байта из ПД
ANL A, #d ; (A) (A) #d - Логическое И аккумулятора и константы
ANL ad, A ; (ad) (ad) (A) - Логическое И прямоадресуемого байта и аккумулятора
ANL ad, #d ; (ad) (ad) #d - Логическое И прямоадресуемого байта и константы
ORL A, Rn ; (A) (A) (Rn) - Логическое ИЛИ аккумулятора и регистра
ORL A, ad ; (A) (A) (ad) - Логическое ИЛИ аккумулятора и прямоадресуемого
; байта
ORL A, @Ri ; (A) (A) (Ri)) - Логическое ИЛИ аккумулятора и байта из ПД
ORL A, #d ; (A) (A) #d - Логическое ИЛИ аккумулятора и константы
ORL ad, A ; (ad) (ad) (A) - Логическое ИЛИ прямоадресуемого байта и
аккумулятора
ORL ad, #d ; (ad) (ad) #d - Логическое ИЛИ прямоадресуемого байта и
константы
XRL A, Rn ; (A) (A) (Rn) - Исключающее ИЛИ аккумулятора и регистра
XRL A, ad ; (A) (A) (ad) - Исключающее ИЛИ аккумулятора и прямоадресуемого
байта
XRL A, @Ri ; (A) (A) ((Ri)) - Исключающее ИЛИ аккумулятора и байта из ПД
XRL A, #d ; (A) (A) #d - Исключающее ИЛИ аккумулятора и константы
XRL ad, A ; (ad) (ad) (A) - Исключающее ИЛИ прямоадресуемого байта и
аккумулятора
XRL ad, #d ; (ad) (ad) #d - Исключающее ИЛИ прямоадресуемого байта и
константы
CPL A ; (A) (/A) - Инверсия аккумулятора
CLR A ; (A) 0 - Сброс (очистка) аккумулятора
SWAP A ; - Обмен местами тетрад в аккумуляторе
Логические команды позволяют использовать особые приемы в ходе обработки цифровых данных. Так, во многих случаях при выполнении программ необходимо проверять или изменять значения одного или нескольких разрядов (битов) числа, находящегося в аккумуляторе. Это можно выполнить с помощью следующих операций
логического умножения числа в аккумуляторе и маски, которая очищает (маскирует, сбрасывает в 0) разряд числа, если в соответствующем разряде маски будет записан 0. И не изменяет его, если в разряде маски записана 1
логического сложения числа в аккумуляторе и маски, которая устанавливает разряд числа в 1, если в таком же разряде маски будет записана 1. И не изменяет его, если в этом разряде записан 0
логического Исключающего ИЛИ числа в аккумуляторе и маски, которая инвертирует содержимое разряда числа, если в соответствующем разряде маски записана 1. И не изменяет его, если в этом разряде записан 0.
Число-маска может являться непосредственными данными в самой логической команде, а также может находиться в регистре или ячейке ПД. Примеры использования маскирования
Таблица 1
Мнемокод |
Число в аккумуляторе |
Маска (байт #d) |
Результат в аккумуляторе |
ANL A, #d |
11111111 |
01000010 |
01000010 |
|
00000000 |
01000010 |
00000000 |
|
11111111 |
11110000 |
11110000 |
|
11111111 |
00001111 |
00001111 |
|
|
|
|
ORL A, #d |
00001111 |
00001111 |
00001111 |
|
11110000 |
00001111 |
11111111 |
|
|
|
|
XRL A, #d |
00001111 |
00001111 |
00000000 |
|
11110000 |
00001111 |
11111111 |
|
|
|
|
В рассмотренных примерах с помощью маски изменяются биты аккумулятора, однако те же операции можно проводить и с прямоадресуемыми ячейками памяти. Чаще всего – это регистры специальных функций, например, порты ввода/вывода.
Микроконтроллеры семейства МК51 имеют 4 команды сдвига аккумулятора
RL A - Сдвиг аккумулятора влево циклический
RLC A - Сдвиг аккумулятора влево через перенос
RR A - Сдвиг аккумулятора вправо циклический
RRC A - Сдвиг аккумулятора вправо через перенос.
Все эти команды осуществляют сдвиг содержимого аккумулятора на один разряд. Их действие можно изобразить в виде
1) RL A – сдвиг влево
Аккумулятор
2) RR A - сдвиг вправо
Аккумулятор
3) RLC A – сдвиг влево через перенос
4) RRC A – сдвиг вправо через перенос
Из этих схем следует, что команды RL A и RR A не влияют на флаг переноса C.
Команды сдвига могут использоваться для умножения и деления на число, кратное 2. Это основано на том, что сдвиг двоичного кода на один разряд влево эквивалентен его умножению на 2, а сдвиг на один разряд вправо – делению на 2.