Пример обработки команд





Пример простейшей программы, использующей обработку команд графического интерфейса пользователя ЭКВМ.


0000 	0Dh 	CX               	;
0001 	02h 	2                	;
0002 	F4h 	PP M 9048        	;Разрешаем
0003 	90h 	                	;автозапуск
0004 	48h 	                	;
0005 	01h 	1                	;
0006 	F4h 	PP M 9200        	;Разрешаем работу
0007 	92h 	                	;интерфейса
0008 	00h 	                	;
0009 	07h 	7                	;Адрес главной
0010 	00h 	0                	;таблицы меню
0011 	F4h 	PP M 9201        	;
0012 	92h 	                	;
0013 	01h 	                	;
0014 	0Dh 	CX               	;
0015 	F4h 	PP M 9202        	;Нулевая форма
0016 	92h 	                	;
0017 	02h 	                	;
0018 	F4h 	PP M 9203        	;Нулевой элемент
0019 	92h 	                	;
0020 	03h 	                	;
0021 	06h 	6                	;Команда перерисовки
0022 	04h 	4                	;экрана
0023 	F4h 	PP M 9208        	;Вводим команду в
0024 	92h 	                	;форму
0025 	08h 	                	;
0026 	F6h 	PP RM 9209       	;Получаем код
0027 	92h 	                	;результата
0028 	09h 	                	;выполнения операции
0029 	57h 	F X!=0 40        	;0 - успешно
0030 	40h 	                	;
0031 	01h 	1                	;1 - требуется
0032 	11h 	-                	;принудительная
0033 	5Eh 	F X=0 61         	;обработка команды
0034 	61h 	                	;иначе - ошибка
0035 	68h 	RM 8             	;Извлекаем число
0036 	3Ah 	K NOT            	;Инвертируем
0037 	48h 	M 8              	;Пишем обратно
0038 	51h 	GOTO 21          	;Переходим к
0039 	21h 	                	;перерисовке экрана
0040 	F6h 	PP RM 9029       	;Проверяем нажатие
0041 	90h 	                	;клавиш
0042 	29h 	                	;
0043 	47h 	M 7              	;Если клавиша не
0044 	3Ah 	K NOT            	;нажата,
0045 	57h 	F X!=0 40        	;продолжим проверку
0046 	40h 	                	;
0047 	67h 	RM 7             	;
0048 	03h 	3                	;Если нажата клавиша
0049 	02h 	2                	;"Выход"
0050 	11h 	-                	;
0051 	31h 	K ABS            	;и текущая форма
0052 	F6h 	PP RM 9202       	;нулевая, то
0053 	92h 	                	;
0054 	02h 	                	;
0055 	38h 	K OR             	;
0056 	57h 	F X!=0 65        	;Переходим к
0057 	65h 	                	;останову программы
0058 	67h 	RM 7             	;Иначе, передаём код
0059 	51h 	GOTO 23          	;клавиши в форму
0060 	23h 	                	;
0061 	0Dh 	CX               	;
0062 	F4h 	PP M 9048        	;Отключаем
0063 	90h 	                	;автозапуск
0064 	48h 	                	;
0065 	F6h 	PP RM 9209       	;Извлекаем код
0066 	92h 	                	;ошибки
0067 	09h 	                	;
0068 	50h 	R/S              	;Останов программы
0069 	51h 	GOTO 00          	;Переход на начало
0070 	00h 	                	;Главная таблица
0071 	00h 	0                	;меню
0072 	74h 	K X!=0 4         	;
0073 	FFh 	.DB 0FFh         	;
0074 	00h 	0                	;Заголовок формы
0075 	08h 	8                	;
0076 	0Bh 	+/-              	;
0077 	09h 	9                	;
0078 	09h 	9                	;
0079 	09h 	9                	;
0080 	0Eh 	ENT              	;
0081 	0Dh 	CX               	;
0082 	0Ch 	EE               	;Таблица флагов
0083 	00h 	0                	;Таблица переходов
0084 	00h 	0                	;
0085 	00h 	0                	;Пустая форма
0086 	00h 	0                	;
0087 	17h 	F LG             	;
0088 	65h 	RM 5             	;Основная программа
0089 	01h 	1                	;Выбор 1-го шрифта
0090 	60h 	RM 0             	;Позиция вывода
0091 	14h 	<->              	;Координаты вывода
0092 	18h 	F LN             	;X0 - 14, Y0 - 18
0093 	5Ch 	F X<0 00         	;Вывод числа из
0094 	00h 	                	;регистра Р8
0095 	00h 	0                	;
0096 	08h 	8                	;
0097 	FFh 	.DB 0FFh         	;Конец программы,
0098 	FFh 	.DB 0FFh         	;программа-заглушка
0099 	FFh 	.DB 0FFh         	;элемента


Программа состоит из инициатора графического интерфейса, обработчика команд графического интерфейса, обработчика нажатия клавиш.

Инициатор разрешает работу автозапуска (Р9048), интерфейса (Р9200), задаёт адрес главной таблицы меню (Р9201), номер начальной формы (Р9202) и элемента (Р9203), и перерисовывает форму.

Обработчик результатов выполнения операции считывает код из регистра Р9209, при успешном выполнении операции переходит к обработчику нажатий клавиш. При необходимости обработки команд, запускается простейший обработчик команд, который извлекает число из регистра Р8, инвертирует число и записывает его обратно в регистр Р8. Далее происходит перерисовка экрана.

Обработчик нажатий клавиш определяет нажатие клавиш, если нажата клавиша "Выход" при нулевой текущей форме, останавливает программу и отключает автозапуск, иначе - передаёт код клавиши в регистр команд интерфейса (Р9208).

Главная таблица меню ссылается на основную форму интерфейса, форма начинается с заголовка.

Таблица флагов разрешает только команду "ВВОД" с признаком ввода, при этом обработка команды производится программой пользователя.

Таблица переходов по команде "ВВОД" ссылается на пустую форму. Таблица переходов по командам "ВЫХОД", "ВЫБОР ВЛЕВО" и "ВЫБОР ВПРАВО" ссылается на основную форму, но выход организован основной программой.

Программа основной формы задаёт шрифт, позицию вывода и выводит число из регистра Р8.


Запускаем программу: В/О, С/П:



При нажатии на клавишу "Ввод" число на экране инвертируется:



При нажатии на клавишу "Выход" происходит остановка программы:



Программа занимает всего одну страницу памяти. Программа является незначительной доработкой программы ввода чисел.



Сайт работает на микрокомпьютере