Вариант программной реализации автомата Мура, страница 3

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

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

Метка

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

Операнды

КОММЕНТАРИЙ

LXI 

H,TABLE

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

MOV

А,PORTx

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

RLC

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

RLC

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

ORA

C

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

MOV

E,A

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

MVI

D,0h

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

DAD

D

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

MOV

A,M

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

MOV

E,A

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

LXI

B,0C03h

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

ANA

B

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

RRC

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

RRC

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

MOV

PORTу, А

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

MOV

А,Е

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

ANA

С

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

MOV

C,A

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

HLT

Останов

Метка

Мнемокод

команды

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

Комментарии

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

TABLE:

03h

00/11

00h

- - - -

0Ch

11/10

00h

- - - -

00h

- - - -

09h

10/01

0Ch

11/00

0Dh

11/01

00h

- - - -

06h

01/10

00h

- - - -

00h

00/00

08h

10/00

00h

- - - -

05h

01/01

03h

00/11

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