1
МИКРОКОНТРОЛЛЕРЫ
h
А л ександ р Ч ерном ы рдин
Окончание.
Начало в №11-12/2005,1/2006
Автоматное
программирование
для микроконтроллеров - 2
Ну а теперь посмотрим, как устроен интерпретатор нашего автомата. Код его более простой, чем тот, который мы
разработали в первой статье об автоматах:
autom at:
ld a l
# 6 ,auto ta b le
ld a h
# 7 ,a u to ta b le
mov
%a5, %d7
emp
%c2, %d7
jn z
$1
emp
%c3, %d7
jn z
$2
mov
%c2, %d7
m ia l
%a6, jmp ta b le
m i ah
%a7, jmp ta b le
add
%a6, %d7
adc
%a7
m tp r
#6,%a6
m tp r
# 7 ,%a7
ijm p
:
cmpl
%d7,0
cmpl
%d7,0
cmpl
%d7,0
s u b i
%a5,1
jn z
$3
r t s
p ta b le :
jmp
s ta rt2 0
jmp
sto p
jmp
tu rn o n
jmp
tu r n o ff
Необходимые пояснения:
1. В автоматной таблице хранятся
теперь не адреса программ проверки
терминальных символов, а коды ожи-
даемых терминальных символов -
дело в том, что саму проверку их уже
фактически выполнили обработчи-
ки соответствующих прерываний. По-
этому вместо вызова подпрограмм
проверки с использованием косвенно-
го регистра 1141, мы теперь просто про-
веряем с помощью команды с т р , тот
ли терминальный символ пришел на
вход автомата.
2. В автоматной таблице также вме-
сто адреса подпрограммы выхода хра-
нится номер подпрограммы в списке
46
Подпрограмма интерпретатора автомата. При входе
предполагается, что реги стр #А содержит 60Ь, а регистр
#С - адрес сегмента обрабатываемого автомата
Загрузить в ЕМ. адрес - автоматной таблицы.
; Занести число строк автомата в счетчик цикла.
; Сравнить номера состояния автомата.
; Нет, номер состояния не тот.
..
; <1> Сравнить полученный и ожидаемый терминальный
; символ.
; Нет, терминальный символ не тот.
..
; Заменить прежнее состояние автомата новым.
; <2> Загрузить адрес таблицы переходов.
Вычислить адрес перехода.
Распространить перенос.
Загрузить IR1 адресом перехода
Фиктивные сравнения для сдвига IR 1.
Вычесть счетчик цикла.
Цикл еще не закончен - продолжить.
Таблица переходов на подпрограммы.
адресе» перехода (таблица jmp_table).
Здесь применена та же конструкция
вычисляемого перехода, которая ис-
пользовалась в реализации автомата
по switch-технологии (такой вариант,
как показывает практика, на больших
автоматных таблицах оказывается не-
сколько меньше по общему объему -
и программ, и автоматных таблиц). Об-
ратите внимание - хотя на соответству-
ющую подпрограмму мы попадаем по
команде ijmp, возврат из подпрограм-
мы все равно выполняется командой
rts. Таким способом мы экономим один
уровень вложенности в стеке адресов
возврата - ведь если мы вместо ijmp
воспользуемся командой ijsr, после
возврата из нее нам все равно придет-
ся тут же выходить из подпрограммы
automat с помощью команды rts (см.
реализацию интерпретатора автомат-
ной таблицы в предыдущей статье цик-
ла)! Поэтому в этом - и только в этом
частном случае, - нам нет необходи-
мости в “лишних” адресах возврата
это очередной програм м истский
трюк: если после вызова какой-либо
подпрограммы вам необходимо тут
же выполнить команду rts, правиль-
нее вместо вызова подпрограммы jsr
выполнить на подпрограмму переход
imp.
I Радиолюбитель - 0 2 /2006
предыдущая страница 45 Радиолюбитель 2006-02 читать онлайн следующая страница 47 Радиолюбитель 2006-02 читать онлайн Домой Выключить/включить текст