logo
Проектирование элементов ЭВУ

Текст программы

Принят следующий формат написания программ на ассемблере. Каждая строка программы делится на четыре поля: поле метки, поле мнемокода, поле операндов, поле комментариев. Метка ассоциируется с 16-битным адресом ячейки памяти, в которую будет помещен первый байт отмеченной меткой команды.

В приведенной программе предполагается, что коды входных сигналов поступают в порт ввода, выходные сигналы засылаются в порт вывода, состояния сохраняются в регистре С. Байты входного сигнала и исходного внутреннего состояния предварительно объединяются в один байт данных вида 000x1x2Q1Q2. Таблицы переходов и выходов автомата Мили записываются в память так, что входной сигнал и исходное состояние с начальным адресом таблицы определяют адрес следующего состояния и выходной сигнал, из которых формируются байт очередного внутреннего состояния 000000Q*1Q*2 и соответствующий этому состоянию байт выходного сигнала 000000у1у2.

Совмещенная таблица переходов и выходов:

Таблица 16.

x1x2

00

01

10

11

00

00/10

01/00

-

01/01

01

10/00

01/10

11/01

-

10

00/01

-

00/00

-

11

11/11

-

11/11

-

Для более ясного понимания алгоритма программной реализации перепишем совмещенную таблицу переходов и выходов (Таблица 16) в следующей форме (Таблица 17):

номер ячейки памяти от нуля

x1x2Q1Q2

у1у2/ Q1Q2

16-ричные коды состояний и выходов

0

0000

00 10

02h

1

0001

01 00

04h

2

0010

-

00h

3

0011

01 01

05h

4

0100

10 00

08h

5

0101

01 10

06h

6

0110

11 01

0Dh

7

0111

-

00h

8

1000

00 01

01h

9

1001

-

00h

10

1010

-

00h

11

1011

-

00h

12

1100

11 11

0Fh

13

1101

-

00h

14

1110

11 11

0Fh

15

1111

-

00h

Программа:

Метка

Мнемокод команды

Операнды

Комментарий

LXI

H,TABLE

Загрузка в HL двухбайтового начального адреса таблицы переходов и выходов

MOV

A.PORTx

Пересылка кода входного сигнала x1x2 из порта ввода в А

RLC

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

RLC

Повторный сдвиг содержимого А на один разряд влево в результате получаем байт 000x1x200 в А

ORA

C

Логическим сложением содержимого А и С вычисляется адрес смещения 000x1x2Q1Q2 таблицы

MOV

E,A

Сохраняем в Е (старший байт DE) байт адреса смещения

MVI

D,0h

Обнуляем младший байт DE

DAD

D

Сложением содержимого HL и DE вычисляется абсолютный адрес кода нового состояния и выхода автомата

MOV

A,M

Пересылка из таблицы в А кода нового состояния и выхода

MOV

E,A

Сразу же сохраняем байт нового состояния и выхода в Е, в А код нового состояния и выхода остается

LXI

B,0C03h

Загружаем в регистровую пару BC 16-ричные коды масок выходов 00001100 и состояний 00000011

ANA

B

Логическим умножением содержимого А и младшего байта регистровой пары BC выделяем в А выходные сигналы 000x1x200

RRC

Сдвиг содержимого аккумулятора на один разряд вправо

RRC

Повторный сдвиг содержимого А на один разряд вправо, в результате получаем байт 000000 x1x2 в А

MOV

PORTy,A

Вывод кода выходных сигналов из А в порт вывода

MOV

A,E

Восстанавливаем в А считанный из таблицы байт выходов и состояний

ANA

C

Логическим умножением содержимого А и маски старшего байта регистровой пары ВС выделяем в А состояния 000000Q1Q2

MOV

C,A

Пересылка кода состояния 000000Q1Q2 из А в С

HLT

Остановка

Таблица 18.

Метка

Мнемокод команды

16-ричные коды состояний и выходов

Записываемые коды состояний и выходов

TABLE:

00h

00/00

01h

00/01

02h

00/10

05h

01/01

06h

01/10

08h

10/00

0Dh

11/01

0Fh

11/11