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 |
Замечание. Вместо неопределенных состояний автомата заносятся нули. Вообще в эти ячейки памяти можно размещать другую информацию, от их содержимого не зависит работа автомата.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.