Таблица переходов (табл.1) занесена в массив памяти с адресами 2202...220D. Каждая ячейка соответствует клетке таблицы, и в ней записывается содержимое клетки в разрядах D1,...,D3 (D3-старший разряд, остальные разряды равны 0). Тогда содержимое адресов карты памяти, показанной на рис.9, можно представить следующим образом:
Рис.10
(2202(Н))= 02(Н); (2203(Н))= 04(Н);(2204(Н))= 06(Н);
(2205(Н))= 04(Н);(2206(Н))= 05(Н); (2207(Н))= 08(Н);
(2208(Н))= ОА(Н); (2209(Н))= ОВ(Н);(220А(Н))= ОА(Н);
(220В(Н))= ОС (Н); (220С(Н))=02(Н); (220D(Н))= ОС (Н).
В ячейке 21FD хранится код текущего состояния автомата Si, а в ячейках 21FE(H) и 21FF(Н) хранится двухбайтовый базовый адрес 2200(Н) массива памяти, относительно которого рассчитываются адреса соответствующих клеток таблицы переходов. В табл.5 в клетках: проставлена сквозная адресация ячеек памяти, в которых хранится их содержимое (в случае, если в ТП имеются пустые клетки, то для них также выделяются ячейки памяти, являющиеся частью сквозной нумерации ТП, однако, обращение к ним при реализации программы не происходит).
Рассмотрим работу подпрограммы SI при поступлении входного набора Х=1, который переводит автомат из состояния 1 в состояние 2 (см. табл.1). Перед обращением к подпрограмме SI во время инициализации (см. программу TABLE) в ячейку 21FD(Н) записывается код начального состояния 1 (00000010). После вызова подпрограммы CALL SI осуществляется пересылка содержимого регистров В,С,Н,N,PSW в стек для их сохранения и вводится входной набор Х=1. При этом значение X записывается в разряд D0, в результате чего в регистре В формируется байт 00000001. Затем производится логическое сложение байта входного набора и байта внутреннего состояния автомата Si (ОООЬООО! V V 00000010=00000011=03(Н)).
В регистровой паре HL формируется адрес 2203(Н) ячейки памяти, откуда считывается код 00000100 нового состояния автомата -код состояния 2 (см. рис.10 и табл.5). Этот код записывается в ячейку 21FD, производится восстановление регистров В,С,Н,L, PSW и возврат в программу TABLE.
S\X |
0 |
1 |
1 |
2 2 0 2 |
2 2 0 3 |
2 |
2 2 0 4 |
2 2 0 5 |
3 |
2 2 0 6 |
2 2 0 7 |
4 |
2 2 0 8 |
2 2 0 9 |
5 |
2 2 0 A |
2 2 0 B |
6 |
2 2 0 C |
2 2 0 D |
Таблица 5
Подпрограмма VF по коду текущего внутреннего состояния автомата Si и входного набора определяет значение его выхода. На рис.11 показана блок-схема подпрограммы с номерами команд в поле комментария, а на рис.12 , - текст программы на ассемблере, на рис.13 представлена карта памяти констант, используемых в ней. Таблица выходов (табл.2) занесена в массив памяти с адресами .ячеек 2222(Н),...,222D(Н). Значение выходов записывается в разряд D0, остальные разряды равны 0. В ячейках 21FB и 21FС хранится двухбайтовый адрес 2220(Н), относительно которого рассчитываются адреса соответствующих клеток таблицы выходов.
Метка |
Команды |
Комментарии |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
PUSH B PUSH H PUSH PSW IN F5 CMA ANI 01 (H) MOV B,A LDA 21FD (H) ORA B MOV B,A LHL D 21FE(H) MOV L,B MOV A,M STA 21FD (H) POP PSW POP H POP B RET |
Сохранение регистров B, C, H, L, PSW в сетке Ввод X→D0 аккумулятора А Инверсия А Выделение разряда D0 Сохранение Х в регистре В Чтение текущего состояния автомата Si Логическое сложение Si и X(Si v X) Сохранение (Si v X) в регистре В Запись базового адреса Формирование младшего байта адреса состояния Si Чтение состояния Si Присвоение состоянию Si состояния Восстановление регистров B, C, H, L, PSW Возврат в программу TABLE |
Рис. 11
Рис. 12
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.