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

Разработка линейных программ.

Линейной называется программа, команды которой исполняются в строго определенной заранее последовательности. Хотя реальные программы управления работой аппаратуры существенно сложнее, но и они обязательно содержат линейные участки.

Приемы программирования последовательных процессов проще всего рассмотреть на примере разработки программы обычного вычисления, например:

Число "а" хранится в ячейке ОЗУ с адресом BF29Н.

Число "b" хранится в регистре D.

Число "с" вводится из периферийного устройства (ПУ) через порт ввода 21.

Результат вычисления (значение "Y") нужно записать в ячейку ОЗУ, адрес которой указан в паре регистров HL.

Предварительно определим, в какой последовательности следует выполнять арифметические и логические операции. Здесь следует правильно использовать названия операций, чтобы затем легче было правильно записать соответствующие команды и найти их в списке.

П р и м е ч а н и е : при наличии вычитания (или сравнения) в заданном вычислении [здесь из вычитается ] программирование данной операции следует начинать с вычитаемого [здесь - ] во избежание появления в программе лишних операций.

  1. Вычитание без учета внешнего переноса .

  2. Логическое отрицание .

  3. Положительное приращение .

  4. Вычитание без учета внешнего переноса .

  5. Исключающее ИЛИ .

  1. Разработка алгоритма решения поставленной задачи.

1. Число "b" из регистра D

пересылается в регистр А.

При реализации вычитания уменьшаемое число "b" обязательно должно находиться в регистре А.

2. Вычитание без переноса , результат записывается в регистр А.

Операция с непосредственной адресацией, так как вычитаемое задается числом 14.

3. Логическое отрицание ,

результат записывается в регистр А.

В данном микропроцессоре эта команда называется "Дополнение аккумулятора").

4. из регистра А

пересылается в регистр Е.

Освобождаем регистр А для выполнения следующей операции.

5. Число "а" из озу

пересылается в регистр А.

Операция с непосредственной адресацией, так как адрес ячейки задается числом BF29H.

6. Положительное приращение

, результат остается

в регистре А.

Результат любой операции приращения остается в том же регистре (или паре регистров).

7. Вычитание без переноса

,

результат записывается в регистр А.

Операция с прямой адресацией, так как оба операнда находятся в регистрах: уменьшаемое - в регистре А, вычитаемое - в регистре Е (см. операцию 4).

8. Число "с" из ПУ через порт 21

вводится в регистр А.

Операция с непосредственной адресацией, так как адрес порта задается числом 21.

9. из регистра А

пересылается в регистр В.

Освобождаем регистр А для выполнения следующей операции.

10. Исключающее ИЛИ,

результат (уже значение Y)

записывается в регистр А

вводится в регистр А.

Операция с прямой адресацией, так как оба операнда находятся в регистрах: число "с" – в регистре А, число - в регистре В (см. операцию 8).

11. "Y" из регистра А

пересылается в ОЗУ.

Операция с прямой адресацией, так как адрес ячейки хранится в паре регистров HL (напомним: такая ячейка обозначается М).

    1. Размещение программы в оперативной памяти.

При разработке линейных программ (и вообще последовательных участков любых алгоритмов) команды следует размещать в соседних ячейках ОЗУ с последовательно возрастающими адресами. В этом случае адрес каждой очередной команды формирует автоматически счетчик команд РС, и не требуются специальные команды переходов.

В оперативной памяти учебного микропроцессорного комплекта (УМК) на базе микропроцессора КР580ВМ80А, которым до сих пор пользуются многие учебные заведения, свободная часть начинается с ячейки по адресу 0800Н. Поэтому все наши программы также будем размещать в ячейках ОЗУ, начиная с этого адреса.

Главным на данном этапе является правильное определение формата команд, так как от этого зависит, сколько ячеек они будут занимать.

Номер Адрес П р и м е ч а н и я:

команды команды

1 0800 а) Команда 2 двухбайтовая с непо-

2 0801 средственной адресацией, во втором допол-

0802 нительном байте В2 указывается численное

3 0803 значение вычитаемого – число 14.

4 0804 b) Команда 5 трехбайтовая с непосред-

5 0805 ственной адресацией, во втором В2 и третьем

0806 В3 дополнительных байтах указывается чис-

0807 ленное значения адреса ячейки – BF29H.

6 0808 с) Команда 9 двухбайтовая с непосред-

7 0809 ственной адресацией, во втором дополни-

8 080А тельном байте В2 указывается численное

9 080В значения адреса порта ввода – 21.

080С

10 080D

11 080E

  1. Запись программы (табл. 5.7).

Табл. 5.7

Номер

команды

Адрес

Команды

Машинный язык

Ассемблер

Комментарии

двоичный код

16-й код

1

0800

01 111 010

MOV A,D

;

2

0801

11 010 110

D6

SUI 14

;

0802

0000 1110

0E

3

0803

0010 1111

2F

SMA

4

0804

01 011 111

5F

MOV E,A

;

5

0805

00 111 010

3A

LDA BF29H

;

0806

0010 1001

2 9

29

0807

1011 1111

B F

BF

6

0808

00 111 100

3C

INR A

;

7

0809

10 010 011

93

SUB E

;

8

080A

01 000 111

47

MOV B,A

;

9

080B

1101 1011

DB

IN 21

Ввод данных

080C

0001 0101

15

10

080D

10 101 000

A8

XRA B

;

11

080E

01 110 111

77

MOV M,A

;

П р и м е ч а н и я :

  1. Запись команды пересылки, подобной 1-й, 4-й, 8-й и 11-й командам данной программы, подробно описаны в примере 1 предыдущего параграфа.

  2. Пример 3 предыдущего параграфа подробно описывает запись команды, относящейся к группе арифметических и логических операций с непосредственной адресацией и похожей на команду 2 данной программы. Здесь также следует иметь в виду, что число 14 относится к десятичной системе счисления (стоит без буквы) и в этом же виде используется на языке Ассемблер, а в двоичном и шестнадцатиричном коде машинного языка указанное число имеет вид: 14(10) = 00001110(2) = 0Е(16) (недостающие разряды заполняем нулями).

  3. Пример 2 предыдущего параграфа подробно описывает запись команды, относящейся к группе арифметических и логических операций с прямой адресацией и похожей на команды 7 и 10 данной программы.

  4. В команде 9 адрес порта ввода (число 21) на языке Ассемблер записано в десятичной системе счисления, а в двоичном и шестнадцатиричном коде машинного языка указанное число имеет вид: 21(10) = 00010101(2) = 15(16) (недостающие разряды двоичного кода заполняем нулями).