Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

Автоматическое сохранение и восстановление адреса основной программы при выполнении подпрограмм позволяет сделать подпрограммы вложенными, т. е. осуществить вызов одной подпрограммы из другой. Уровень вложенности для данного МП определяется размером стека.

Существуют также команды условного вызова подпрограмм и возврата из них. Они позволяют вызвать подпрограмму и возвратиться из нее по определенному состоянию заданных разрядов регистра признаков.

Помимо команд вызова подпрограмм и возврата из них, со стеком можно обмениваться информацией. С помощью команды PUSH RP осуществляется запись в стек содержимого регистра RP МП, а с помощью команды POP RP – запись данных из стека в регистр RP процессора. Эти команды однобайтные. В них содержится номер пары регистров МП. Сущность команд можно показать следующим образом:

PUSH B: (SP – 1) f B, (SP – 2) f C; SP = SP – 2

POP D: E f (SP), D f (SP + 1); SP = SP + 2

При записи в стек содержимого пары регистров или программного счетчика по адресу SP – 1 записывается содержимое старшего регистра из указанной пары (в примере B) или старшего байта PCH (программного счетчика), а по адресу SP – 2 в стек записывается содержимое младшего регистра (в примере C) из указанной пары или младшего байта PCL (программного счетчика).

При записи из стека данных в пару регистров или в программный счетчик в младший регистр регистровой пары или в PCL записывается число из адреса, указанного в указателе стека SP, а в старший регистр регистровой пары или в PCH – число, записанное по адресу SP + 1. В результате выполнения команды содержимое SP увеличивается на 2. Таким образом, при записи данных адреса стека убывают от больших к меньшим, а указатель стека SP всегда содержит последний адрес стека, в котором записано число. При разработке программ необходимо назначать область стека, записывая в SP адрес с помощью команды LXI SP, <Адрес> или команды SPHL.

НЕ нашли? Не то? Что вы ищете?

Все операции со стеком должны быть сбалансированы, т. е. каждая подпрограмма должна содержать равное количество команд PUSH и POP, и оканчиваться командой RET, иначе выполнение команды RET приведет к записи в PC случайного числа из стека. Адрес возврата в основную программу будет потерян и нарушится последовательность ее выполнения.


Рис. 3.1. Алгоритм подпрограммы временной задержки.

Обычно в виде подпрограмм записываются многократно используемые фрагменты программ, например подпрограмма выдачи сигнала на индикаторы, подпрограмма обслуживания клавиатуры и дисплея и т. д. Ниже приводятся примеры программ, на которых демонстрируется работа с подпрограммами и со стеком.

На Рис. 3.1 приведен алгоритм простой подпрограммы временной задержки. Здесь общее время задержки вычисляется по формуле:

(3.1)

где – число, первоначально записанное в счетчик. В качестве счетчика использован регистр B, в котором записывается число из регистра C. Команда NOP нужна для увеличения времени выполнения цикла, а, следовательно, и общей задержки. Повтором необходимого числа команд NOP можно корректировать минимальную временную задержку. Величины и фиксированы и в цикл не входят. Минимальная задержка задается при , а максимальная при . Программа Прогр. 3.1 реализует алгоритм программной задержки, где занимает два байта: D и E. Для увеличения времени задержки организовано два цикла (цикл в цикле), поэтому величина может варьироваться от 0000h до FFFFh (т. е. от 0 до 65535), однако, для вычисления временной задержки здесь должна использоваться гораздо более сложная формула, нежели формула (3.1).

Прогр. 3.1. Программа временной задержки.

MVI B, 05h

;Загрузка числа в B.

LAB_1:

MVI C, FFh

;Загрузка числа в C.

LAB_2:

NOP

;Нет операции.

MOV A, C

;Занести C в Акк.

CPI 00h

;Сравнить Акк. с нулем.

JZ LAB_3

;Если Акк. = 0, идти на LAB_3, иначе

; след. команда.

DCR C

;Уменьшение числа в регистре C на 1.

JMP LAB_2

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

LAB_3:

MOV A, B

;Занести B в Акк.

CPI 00h

;Сравнить Акк. с нулем.

JZ LAB_4

;Если Акк. = 0, идти на LAB_4, иначе

; след. команда.

DCR B

;Уменьшение числа в регистре B на 1.

JMP LAB_1

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

LAB_4:

HLT

;Выход из программы.

Программа Прогр. 3.2 (ниже, на стр. 44) реализует последовательное высвечивание сегментов (точек) индикатора дисплея разрешением 7 Х 8, показанного на Рис. 3.2. Положение высвечиваемого сегмента индикатора определяется содержанием портов ввода/вывода процессора с адресами 01h (по горизонтали) и 02h (по вертикали). При этом для того, чтобы смена инициируемого сегмента была заметна, использована подпрограмма, которая представляет собой видоизмененную программу временной задержки Прогр. 3.1.


Рис. 3.2. Индикатор дисплея.

Прогр. 3.2. Программа последовательного высвечивания сегментов индикатора дисплея.

MVI B, 00h

;В рег. B байт внешнего цикла задержки.

MVI C, 0Fh

;В рег. C байт внутреннего цикла задержки.

LXI H, 0100h

;В HL адрес ячейки с байтом внешнего цикла

; задержки.

MOV M, B

;В память байт внешнего цикла задержки.

INX H

;В HL адрес ячейки с байтом внутр. цикла

; задержки (инкр. HL).

MOV M, C

;В память байт внутреннего цикла задержки.

DCX H

;Декрементация HL.

MVI B, 01h

;Начальная загрузка B (для Port 02h).

MVI C, 01h

;Начальная загрузка C (для Port 01h).

MOV A, B

;В Акк. содержимое регистра B.

JMP LAB_2

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

LAB_1:

RLC

;Сдвиг Акк. влево.

MOV B, A

;Сохранение Акк. в В.

LAB_2:

OUT 02h

;Выдача байта из Акк. в порт 02h.

MOV A, C

;В Акк. содержимое регистра C.

JMP LAB_4

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

LAB_3:

RLC

;Сдвиг Акк. влево.

LAB_4:

OUT 01h

;Выдача байта из Акк. в порт 01h.

CALL PROC_1

;Обращение к подпрограмме PROC_1.

CPI 40h

;Сравнение Акк. с 40h.

JNZ LAB_3

;Переход на LAB_3, если неравенство.

MOV A, B

;Запись В в Акк.

CPI 80h

;Сравнение Акк. с 80h.

JNZ LAB_1

;Переход на LAB_1, если неравенство.

HLT

;Выход из программы.

PROC_1:

PUSH PSW

;Начало подпрограммы. Сохранение в стеке

; рабочих регистров.

PUSH B

PUSH D

PUSH H

MOV B, M

;Загрузка в B из памяти байта внешнего цикла

; задержки.

INX H

;Инкрементация HL.

LAB_5:

MOV C, M

;Загрузка в C из памяти байта внутреннего

; цикла задержки.

LAB_6:

NOP

;Пустая операция.

MOV A, C

;Занести C в Акк.

CPI 00h

;Сравнить Акк. с нулем.

JZ LAB_7

;Если Акк. = 0, идти на LAB_7, иначе

; след. команда.

DCR C

;Уменьшение числа в регистре C на 1.

JMP LAB_6

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

LAB_7:

MOV A, B

;Занести B в Акк.

CPI 00h

;Сравнить Акк. с нулем.

JZ LAB_8

;Если Акк. = 0, идти на LAB_8, иначе

; след. команда.

DCR B

;Уменьшение числа в регистре B на 1.

JMP LAB_5

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

LAB_8:

POP H

;Восстановление из стека рабочих регистров.

POP D

POP B

POP PSW

RET

;Возврат из подпрограммы.

4.2.  Задания для самоподготовки

1.  Рассмотреть особенности выполнения команд операций со стеком (см. Табл. 0-5, Табл. 0-6).

2.  Ознакомиться с группой команд передачи управления (см. Табл. 0-11Табл. 0-13).

3.  Подробно рассмотреть особенности выполнения команд вызова и возврата из подпрограмм (см. Табл. 0-13).

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

5.  Определить, при каких числах в регистрах B и C программа Прогр. 3.1 будет осуществлять минимальное и максимальное время задержки, приблизительно оценить минимальное и максимальное время задержки.

6.  Что нужно изменить в программе Прогр. 3.1, чтобы время задержки увеличить до одного часа?

7.  Изучить работу программы Прогр. 3.2. Обратить внимание на то, как подпрограмма по окончании своей работы обеспечивает восстановление состояния процессора.

8.  Что нужно сделать, чтобы программа Прогр. 3.2 осуществляла последовательное высвечивание сегментов индикатора дисплея разрешением 5 Х 8, 8 Х 8?

4.3.  Задания к лабораторной работе

Задание 3.1. Исследование программы временной задержки.

1.  Порядок выполнения задания:

2.  Ввести программу Прогр. 3.1, исправить ошибки, осуществить пуск.

3.  Исследовать процесс выполнения программы в пошаговом режиме. После каждой команды проверить содержимое всех регистров МП.

4.  Подбором содержимого регистров B и C в первых двух строках программы добиться временной задержки, приблизительно равной 2 – 3 минутам.

Задание 3.2. Исследование программы последовательного высвечивания сегментов индикатора дисплея.

Порядок выполнения задания:

1.  Ввести программу Прогр. 3.2, исправить ошибки, осуществить пуск.

2.  Исследовать процесс выполнения программы в пошаговом режиме.

3.  Исправить программу так, чтобы она осуществляла последовательное высвечивание сегментов индикатора дисплея разрешением 6 Х 6.

4.4.  Содержание отчета

Отчет должен содержать:

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

2.  Перечень команд операций со стеком (Табл. 0-5, Табл. 0-6) и команд вызова и возврата из подпрограмм (Табл. 0-13).

3.  Программу Прогр. 3.1 и измененную программу Прогр. 3.2 (выполняющую последовательное высвечивание сегментов индикатора дисплея разрешением 6 Х 6) с комментариями и в печатном виде.

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

5.  Ответы на вопросы в пп. 56 и 8 задания для самоподготовки.

6.  Выводы по лабораторной работе.

4.5.  Контрольные вопросы

1.  Что такое подпрограмма?

2.  Для чего предназначены команды передачи управления?

3.  Назначение стека.

4.  Какие в системе команд МП КР580 предусмотрены операции со стеком?

5.  Какие команды МП КР580 используются при обращении к подпрограммам и возврате из подпрограмм?

6.  Для чего в программе Прогр. 3.1 предназначены строки: 4 – 6, 9 – 11?

7.  Где можно использовать программу Прогр. 3.2?

Лабораторная работа №5.  Ввод/вывод, маскирование данных и организация условных переходов

Цель работы: Изучение методов подключения и организации обмена информацией с простейшими устройствами ввода/вывода. Исследование программных способов маскирования данных и организации условных переходов в МП КР580.

5.1.  Краткие сведения из теории

5.1.1.  Общие сведения об организации интерфейса ввода/вывода.

В обслуживаемых МП-системах управления возникает необходимость в разработке аппаратной и программной частей интерфейса ввода/вывода, в том числе интерфейса "человек – МП-система". Наибольшее распространение в настоящее время получили следующие средства ввода/вывода информации в МП-системах: клавиатуры, линейные дисплеи (как правило, светодиодные или жидкокристаллические индикаторы), алфавитно-цифровые дисплеи (как правило, на основе ЭЛТ-трубок). Для сопряжения МП-системы на базе МП КР580 с этими и прочими устройствами ввода/вывода (УВВ) используются следующие БИС: контроллер клавиатуры (КК) К580ВК79, контроллер видеотерминала (КВТ) К580ВГ75, программируемый периферийный адаптер (ППА) К580ВВ55, программируемый связной адаптер (ПСА) К580ВВ51, контроллер прямого доступа к памяти (ПДП) К580ВТ57, программируемый контроллер прерываний (ПКП) К580ВН59, программируемый интервальный таймер (ПИТ) К580ВИ53 (см. [1]).

ППА К580ВВ55 может быть использован в качестве интерфейсной БИС для широкого набора различного периферийного оборудования без каких-либо дополнительных внешних логических схем. На Рис. 4.1 приведен пример функциональной схемы вывода информации на дисплей и ввода информации с клавиатуры. Здесь обозначено: МД – магистраль данных; МА – магистраль адреса; МУ – магистраль управления, ИНД1 ... ИНД6 – шесть цифровых полупроводниковых индикаторов цифрового дисплея. Также на Рис. 4.1 изображена клавиатура с матрицей клавиш размерностью 6 Х 4.

Рис. 4.1. Функциональная схема вывода информации на дисплей и ввода информации с клавиатуры.

В этом примере ППА использует выводы Д0Д7 для подключения МД к МП и обмена данными ППА с МП, а также входные и выходные порты A, B и C для связи контроллера с дисплеем и клавиатурой. Порты A и B должны быть запрограммированы на вывод информации, а порт C – на ввод. Для управления контроллером используются выводы (входы): ЧТ и ЗП – чтение из ППА в МП и запись в ППА из МП, соответственно; ВК – вход разрешения программирования контроллера; R (СБР) – сброс контроллера. В порту A для передачи данных применяются только первые шесть разрядов A0A5. В порту C используются разряды C2, C4, C5 и C6, поэтому число, которое будет передаваться в порт C, будет иметь специфику, обусловленную наличием нулей в его задействованных разрядах. На одной из линий C2, C4, C5 или C6 появляется 0 в случае нажатия соответствующей клавиши и подачи на адресные шины клавиатуры нулей порта A. Порт B применяется для вывода информации на индикаторы.

К командам ввода/вывода МП КР580 относятся команды IN N и OUT N. При выполнении команды IN N процессор считывает число из входного устройства с адресом N и записывает его в аккумулятор. При выполнении команды OUT N процессор записывает число из аккумулятора в выходное устройство с адресом N. Адрес устройства указывается одним байтом (N = 0 … 255), поэтому с помощью данных команд можно обменяться информацией не более чем с 256 внешними устройствами.

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

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

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

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

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

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

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

Мнемокод

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

Маска в D

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

Комментарий

ANA D

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

ORA D

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

XRA D

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

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

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

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9