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

4.1.2.Маскирование данных.

В различных ситуациях при выполнении программ необходимо проверять или изменять (маскировать) состояние одного или нескольких разрядов числа в аккумуляторе. Это можно осуществить с помощью следующих операций:

  • Логическое умножение числа в аккумуляторе и маски – очищает разряд числа (устанавливает в 0), если в соответствующем разряде маски будет записан 0, и не изменяет его, если в этом разряде маски записана 1;

  • Логическое сложение числа в аккумуляторе и маски – устанавливает разряд числа в 1, если в соответствующем разряде маски будет записана 1, и не изменяет его, если в этом разряде маски записан 0;

  • Логическое "исключающее ИЛИ" числа в аккумуляторе и маски – инвертирует содержание разряда числа, если в соответствующем разряде маски будет записана 1, и не изменяет его, если в этом разряде маски записан 0.

Примеры использования операций маскирования содержимого аккумулятора в случае, если маска находится в регистре, приведены в Табл.  4 .4. В этом случае команды однобайтные. Маскирование содержимого аккумулятора возможно также байтом данных (ANI D8, ORI D8 и XRI D8). В этом случае маска содержится в байте данных, а команды являются двухбайтными. При выполнении логических операций (И, ИЛИ, "исключающее ИЛИ" и НЕ) задействуются разряды Z, S, P, AC регистра признаков (С = 0). Это позволяет проверять состояние любого разряда числа и выполнять условные переходы в программах.

Табл. 4.4. Примеры использования операций маскирования.

Мнемокод

Машинный код

Число в аккумуляторе

Маска в D

Результат в аккумуляторе

Комментарий

ANA D

A2h

00111010

11111111

00001111

11110000

00100011

10101100

00100010

11111111

11111111

00000000

00101000

00100010

00001111

11110000

00000000

Логическое умножение (И) содержимого Акк. с байтом D.

ORA D

B2h

00111010

00001111

11110000

10101100

00001111

00001111

10111110

00001111

11111111

Логическое сложение (ИЛИ) содержимого Акк. с байтом. D.

XRA D

Aah

00111100

00001111

11110000

10101100

00001111

00001111

10010110

00000000

11111111

Логическое "исключающее ИЛИ" содержимого Акк. с байтом D.

4.1.3.Организация условных переходов.

Команды условных переходов относятся к группе команд передачи управления (см. Табл. 0-, Табл. 0- – Табл. 0-). Организация условных переходов в МП осуществляется с помощью регистра признаков (F), который имеет 5 устанавливаемых разрядов (признаков). Все пять бит регистра признаков устанавливаются в результате выполнения операций в АЛУ:

  • Признак переноса (С) устанавливается в 1, если при выполнении арифметической команды возникает переполнение аккумулятора или при выполнении команды сдвига вытесняется единица из старшего или младшего разряда.

  • Признак дополнительного переноса (АС) устанавливается в 1, если при выполнении команд возникает единица переноса из третьего разряда числа. Состояние разряда может быть проанализировано лишь командой десятичной коррекции.

  • Признак знака (S) устанавливается в 1, если седьмой (старший) разряд числа равен 1. Машинное слово представляется числом от –128 до +127. Седьмой разряд числа указывает на знак числа. Если он равен 0, то число положительное, если 1, то отрицательное.

  • Признак нулевого содержимого аккумулятора (Z) устанавливается в 1, если после выполнения команды результат равен нулю (все биты аккумулятора равны нулю), в противном случае в разряд записывается 0.

  • Признак паритета (Р) устанавливается в 1, если число единичных битов аккумулятора четно, в противном случае этот разряд будет установлен в нулевое состояние.

Команда условного перехода проверяет состояние соответствующего разряда регистра признаков (F). Если при проверке состояния разряда регистра признаков условие не подтверждается, то выполняется следующая по порядку команда программы, иначе происходит переход. Все команды условных переходов являются трехбайтными: первый байт содержит код команды, второй и третий байты – адрес передачи управления. Таким образом, команды условных переходов позволяют строить ветвящиеся алгоритмы и, в зависимости от текущего значения результата выполнения программы, переходить на различные участки этой программы. Ниже приведен пример программы, использующей маскирование данных и организацию условных переходов.

Программа Прогр.  4 .6 осуществляет ожидание простого (двоичного) события и при возникновении этого события формирует простое (двоичное) управление. В программе каждый бит порта с адресом 03h ассоциируется с некоторым событием от внешнего устройства, например, соответствует состоянию некоторого концевого переключателя технологического процесса. Таким образом, в технологическом процессе задействованы 8 концевых переключателей с номерами 0, 1, …, 7. Так же в технологическом процессе задействованы 8 исполнительных механизмов с номерами 0, 1, …, 7, могущих принимать выключенное состояние или включенное состояние (0 или 1). Каждому механизму соответствует свой бит порта с адресом 04h. Процессор принимает данные из портов 03h, 04h и выдает данные в порт 04h. Программа ожидает включение концевого переключателя с номером 5 (остальные переключатели могут при этом иметь произвольные состояния). В случае достоверности данного события программа включает механизм с номером 4, в противном случае она отключает этот механизм, если он не отключен. При этом программа не должна изменять состояния остальных механизмов.

Прогр. 4.6. Программа ожидания простого события и формирования простого управления.

MVI B, 5Dh

;Загрузка в B заранее заданного состояния механизмов.

MOV A, B

;Загрузка в Акк. заранее заданного состояния механизмов.

OUT 04h

;Вывод в порт механизмов (04h) заранее заданного состояния.

LAB_1 :

IN 04h

;Чтение в Акк. состояния механизмов.

MOV B, A

;Сохранение в B состояния механизмов.

IN 03h

;Чтение в Акк. состояния концевых переключателей.

ANI 20h

;Маскирование всех битов Акк., кроме бита с номером 5.

JZ LAB_2

;Если бит с номером 5 равен 0, то переход на LAB_2.

MVI A, 10h

;Загрузка в Акк. маски.

ORA B

;Установка бита с номером 4.

JMP LAB_3

;Безусловный переход на LAB_3.

LAB_2 :

MVI A, Efh

;Загрузка в Акк. маски.

ANA B

;Сброс бита с номером 4.

LAB_3 :

OUT 04h

;Включение/выключение механизма с номером 4.

JMP LAB_1

;Безусловный переход на LAB_1.

HLT

;Конец программы.

На практике, как правило, приходится иметь дело с гораздо более сложными событиями. Например, процессор должен выполнить некоторое действие, если биты порта с адресом 05h принимают следующие значения: 0-й, 2-й и 4-й биты равны 1, а 1-й и 7-й биты равны 0; или 1-й и 4-й биты равны 1, а 0-й, 3-й и 5-й биты равны 0. Такое событие более кратко можно однозначно записать в виде выражения алгебры Буля: , где  – биты порта с адресом 05h, а " " и " " – операции логического умножения и логического сложения.