Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР5.docx
Скачиваний:
6
Добавлен:
13.09.2019
Размер:
475.36 Кб
Скачать

Битовые операции

При программировании операций управления или контроля часто возникает необходимость проверять или изменять состояние отдельных битов многозарядных кодов. Для проведения битовых операций в систему команд микропроцессора КР580 введены логические команды, команды сдвигов и команды с флагом переноса С.

Изменение состояния отдельных разрядов кода в аккумуляторе производится логической командой, вторым операндом которой является специально сформированный код маски:

очистка разряда – логическое умножение (или конъюнкция) – очищает разряд кода, если в соответствующем разряде маски записан нуль, и не изменяет его, если в разряде маски записана 1;

установка разряда – логическое сложение (или дизъюнкция) устанавливает разряд кода в 1, если в соответствующем разряде маски записана 1, и не изменяет его, если в разряде маски записан нуль;

инверсия разряда – логическое «исключающее или» (неэквивалентность, сложение по модулю 2) инвертирует содержимое разряда кода, если в соответствующем разряде маски записана 1, и не изменяет его, если в этом разряде маски записан нуль.

При выполнении всех логических команд формируется разряды Z, S, P, A, C регистра признаков (в разряд С записывается нуль). Это позволяет проверять состояние любого разряда кода в аккумуляторе и выполнять условные переходы в программе.

Ход работы:

Проведем исследование программы 1. Сама программа представлена в таблице 1.

Таблица 1. Программа 1

Адрес

Машинный код

Мнемокод

Комментарии

8200

21 FF 83

LXI H, 83FF

Подготовка клавиатуры и дисплея.

8203

3E E0

MVI A, E0

8205

D3 02

OUT 02

8207

DB 00

IN 00

Ввод с клавиатуры

8209

2F

CMA

Инверсия аккумулятора.

820A

E6 F0

ANI F0

Логическое умножение с маской F0

820C

77

MOV M, A

Запись результата в ячейку по адресу М.

820D

C3 07 82

JMP 8207

Переход на ячейку 8207

План исследования программы 1:

  1. Ввести программу 1, осуществить пуск и исследовать результат ее выполнения по светящимся сегментам дисплея.

  2. Заменяя в программе 1 команду ANI на команды ORI(F6), XRI(EE), исследовать результат ее выполнения.

  3. Заменяя в программе 1 команду ANI на команды AMT A(A7), ORA A(B7), XRA A (AF) совместно с командой NOP (код 00), исследовать результат ее выполнения.

Исследование:

Программа 1 должна принять код с клавиш 0 – 7 клавиатуры в аккумулятор, провести логическую операцию и результат выдать на крайний правый индикатор.

  1. На рисунке 1 представлен результат работы программы 1.

Рисунок 1 – Результат работы программы 1.

На рисунке 1 видно, что после нажатия клавиши 4 (код 00010000) и выполнения программой всех логических операций (инверсия и конъюнкция с маской 11110000), на крайнем правом сегменте дисплея выводится код 11100000

2. При замене команды ANI на команды ORI (дизъюнкция) и XRI (сложение по модулю 2) и при нажатии клавиши 4 (код 00010000) получаем соответственно коды 11111111 (при ORI) и 00011111 (при XRI).

3. В случае замены команды ANI на ANA A (конъюнкция кода в аккумуляторе, код команды A7) и ORA А (дизъюнкция кода в аккумуляторе, код команды В7) и добавления команды NOP (команда не производит никаких действий, служит для резервирования места в коде, код команды 00) код в аккумуляторе не изменяется, поскольку содержимое аккумулятора совпадает с маской операции (содержимое аккумулятора и есть маска).

Например, при нажатии клавиши 4 (код 00010000, но после выполнения инверсии, командой CMA, код 11101111), результатом является код 11101111.

При замене команды ANI на XRI A (сложение по модулю 2, код команды AF), независимо от нажатой клавиши, результатом работы программы является код 00000000.

Проведем исследование программы 2. Сама программа представлена в таблице 2.

Таблица 2. Программа 2

Адрес

Машинный код

Мнемокод

Комментарии

8200

21 FF 83

LXI H, 83FF

Подготовка клавиатуры и дисплея.

8203

3E E0

MVI A, E0

8205

D3 02

OUT 02

8207

DB 00

IN 00

Ввод с клавиатуры

8209

2F

CMA

Инверсия аккумулятора.

820A

E6 10

ANI 10

Логическое умножение с маской F0

820C

3E 06

MVI A, 06

Запись в аккумулятор кода 06 (код символа 1).

820E

C2 13 82

JMZ 8213

Если клавиша 4 не нажата, то переход на ячейку 8213

8211

F6 3F

ORI 3F

Иначе, формируем код символа 0

8213

77

MOV M, A

Записываем содержимое аккумулятора по адресу в HL

8214

C3 07 82

JMP 8207

Переход в начало

План исследования программы 2:

  1. Ввести в УОУ программу 2, осуществить пуск и убедиться, что при ее выполнении УОУ реагирует лишь на состояние клавиши 4.

  2. Ввести программу 5, запустить ее и исследовать.

Исследование:

Программа 2 опрашивает клавиши 0 – 7 и передает на дисплей символ, соответствующий состоянию клавиши 4: 0 –отпущена, 1 – нажата.

1. После ввода и исследования программы 2 (рисунок 2), подтвердилось, что программа действительно реагирует только на нажатие клавиши 4, однако результат программы отличается от предполагаемого: программа должна была вывести на дисплей символ 0, в случае если клавиша 4 отпущена, и символ 1 если нажата. В действительности же результат противоположный: если клавиша 4 отпущена, на дисплей выводится символ 1, а если нажата то символ 0.

Рисунок 2 – Результат работы программы 2.

2. Введем в УОУ и проведем исследование программы 5, которая должна выдавать на дисплей 1, если численное значение принятого от клавиатуры кода превышало 9, и 0 – в противном случае. Сама программа 5 представлена в таблице 3, результат работы программы 5 представлен на рисунке 3.

Таблица 3. Программа 5

Адрес

Машинный код

Мнемокод

Комментарии

8200

21 FF 83

LXI H, 83FF

Подготовка клавиатуры и дисплея.

8203

3E E0

MVI A, E0

8205

06 3F

MVI B, 3F

Сохраняем в регистр B код 3F (код символа 0).

8207

0E 06

MVI C, 06

Сохраняем в регистр C код 06 (код символа 1).

8209

70

MOV M, B

Вывод на дисплей символа 0 (поскольку условие вывода символа 1 еще не выполнено).

820A

DB 00

IN 00

Ввод с клавиатуры.

820C

57

MOV D, A

Сохранение полученного кода в регистр D.

820D

E6 F0

ANI F0

Логическое умножение по маске F0.

820F

C2 1E 82

JNZ 821E

Если результат не нулевой, значит, полученный код заведомо превышает 9, переходим на вывод символа 1, иначе продолжаем проверку.

8213

7A

MOV A, D

Восстанавливаем содержимое аккумулятора из регистра D.

8214

E6 06

ANI 08

Логическое умножение по маске 08.

8216

CA 09 82

JZ 8209

Если результат нулевой, значит, полученный код не может превышать 9, переходим на вывод символа 0, иначе выводим символ 1.

8218

7A

MOV A, D

Восстанавливаем содержимое аккумулятора из регистра D.

8219

E6 06

ANI 06

Логическое умножение по маске 06.

821B

CA 09 82

JZ 8209

Если результат нулевой, значит, полученный код не может превышать 9, переходим на вывод символа 0, иначе выводим символ 1.

821E

71

MOV M, C

Вывод символа 1.

821F

C3 0A 82

JMP 820A

Переходим в начало.

Рисунок 3 – Результат работы программы 5.

План исследования программы 5:

  1. Ввести в УОУ программу 5, осуществить пуск и убедиться, что программа работает правильно.

  2. Изучить алгоритм работы программы 5.

Исследование:

1. После проведения исследования подтвердилось, что программа работает правильно, в случае если полученный код превышает 9, на дисплей выводится символ 1, в противном случае – выводится символ 0.

2. Проверка полученного кода происходит по следующему алгоритму:

После получения аккумулятором кода нажатых клавиш клавиатуры (на рисунке 3 – это клавиши 4 и 6 – код 01010000) производится логическое умножение по маске F0 = (11110000). Этим проверяется содержимое последних четырех бит, если хотя бы один из них равен 1, то код не зависимо от значений остальных бит, превышает 9, дальнейшую проверку можно не проводить, выводим на дисплей символ 1.

В противном случае продолжаем проверку. Производим логическое умножение по маске 08 = (00001000). Этим проверяется содержимое четвертого бита, если он равен 0, то код не зависимо от содержания первых трех бит, не может превышать 9, дальнейшую проверку можно не проводить, выводим на дисплей символ 0.

Иначе продолжаем проверку. Производим логическое умножение по маске 06 = (00000110). Этим проверяется содержание второго и третьего бита кода, если хотя бы один из них равен 1, то полученный код превышает 9, выводим символ 1, в противном случае код меньше 9 и выводим символ 0.

Проведем исследование программы 3, которая должна опрашивать клавиши 0 – 7, и в случае если нажата хотя бы одна из клавиш 0, 2, 4, 6 то вывести на дисплей символ Ч. В противном случае вывести символ Н. Программа 3 представлена в таблице 4.

Таблица 4. Программа 3

Адрес

Машинный код

Мнемокод

Комментарии

8200

3E E0

MVI A, 0E

Подготовка клавиатуры и дисплея.

8202

D3 02

OUT 02

8204

3E 76

MVI A, 76

Выводим на дисплей символ Н, т.к. условие вывода символа Ч еще не выполнено.

8206

32 F8 83

STA 83F8

8209

AF

XRA A

Очистка аккумулятора

820A

DB 00

IN 00

Ввод с клавиатуры.

820C

E6 FF

ANI FF

Логическое умножение по маске FF.

820E

CA 04 82

JZ 8204

Если результат равен нулю, то переходим в начало.

8211

E6 55

ANI 55

В противном случае выполняем логическое умножение по маске 55.

8213

CA 00 81

JZ 8204

Если результат равен нулю, то переходим в начало.

8216

3E 66

MVI A, 66

Выводим на дисплей символ Ч, т.к. условие вывода выполнено.

8218

32 F8 83

STA 83F8

821B

C3 0A 82

JMP 820A

Переход в начало.

Результат работы программы 3 представлен на рисунке 4.

Рисунок 4 – Результат работы программы 3.

План исследования программы 3:

  1. Ввести в УОУ программу 3, осуществить пуск и убедиться, что программа работает правильно.

  2. Изучить алгоритм работы программы 3.

Исследование:

1. В ходе исследования подтвердилось, что программа работает правильно (рисунок 4). Действительно, если нажата хотя бы одна из клавиш 0, 2, 4, 6, то на дисплей выводится символ Ч, во всех остальных случаях – символ Н.

2. Программа 3 работает по следующему алгоритму:

Сначала идет логическое умножение по маске FF = (11111111), чтобы выявить было ли нажатие на клавиши. Если результат нулевой, то возвращаемся в начало и выводим символ Н. В противном случае, выполняем проверку дальше.

Затем, проверяем было ли нажатие клавиш 0, 2, 4, 6. Для этого производим логическое умножение по маске 55 = (01010101). Если результат операции нулевой, значит, нажатия не было, возвращаемся в начало и выводим символ Н, иначе – выводим символ Ч.

Проведем исследование программы 4, которая должна выдавать на дисплей символ F, если одновременно нажаты одна из клавиш 0 – 3 и одна из клавиш 4 – 7, либо символа 0 в противоположном случае. Программа 4 представлена в таблице 5.

Таблица 5. Программа 4

Адрес

Машинный код

Мнемокод

Комментарии

8200

3E E0

MVI A, 0E

Подготовка клавиатуры и дисплея.

8202

D3 02

OUT 02

8204

3E 76

MVI A, 3F

Выводим на дисплей символ 0, т.к. условие вывода символа F еще не выполнено.

8206

32 F8 83

STA 83F8

8209

AF

XRA A

Очистка аккумулятора

820A

DB 00

IN 00

Ввод с клавиатуры.

820C

57

MOV D, A

Сохраняем полученный код в регистре D.

820D

E6 F0

ANI F0

Производим логическое умножение по маске F0.

821F

CA 04 82

JZ 8204

Если результат равен нулю, то переходим в начало.

8212

7A

MOV A, D

Восстанавливаем значение аккумулятора из регистра D

8213

E6 0F

ANI 0F

Производим логическое умножение по маске 0F.

8215

CA 04 82

JZ 8204

Если результат равен нулю, то переходим в начало.

8218

3E 71

MVI A, 71

Иначе, выводим символ F.

821A

32 F8 83

STA 83F8

821D

C3 0A 82

JMP 820A

Переход в начало.

Результат работы программы 4 представлен на рисунке 5.

Рисунок 5 – Результат работы программы 4.

План исследования программы 4:

  1. Ввести в УОУ программу 4, осуществить пуск и убедиться, что программа работает правильно.

  2. Изучить алгоритм работы программы 4.

Исследование:

1. В ходе исследования подтвердилось, что программа работает правильно (рисунок 5). Действительно, если нажата хотя бы одна из клавиш 0 – 3 и одна из клавиш 4 – 7, то на дисплей выводится символ F, во всех остальных случаях – символ 0.

2. Программа 4 работает по следующему алгоритму:

Сначала идет логическое умножение по маске F0 = (11110000), чтобы выявить было ли нажатие на клавиши 0 - 3. Если результат нулевой, то возвращаемся в начало и выводим символ 0. В противном случае, выполняем проверку дальше.

Затем, проверяем было ли нажатие клавиш 4 - 7. Для этого производим логическое умножение по маске 0F = (00001111). Если результат операции нулевой, значит, нажатия не было, возвращаемся в начало и выводим символ 0, иначе – выводим символ F.

Вывод:

Выполнив данную лабораторную работу, мы изучили команды логических операций и передачи управления; изучили программные способы поразрядной обработки данных и организации условных переходов в УОУ.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]