Вывод текста в строку комментариев


Главная / ЭКВМ / Программы / Примеры

Строка комментариев располагается в нижней строке экрана ЭКВМ и выводится на экран в режиме автоматической работы, а также при выполнении программы, после исполнения команды "К ЭКР".

В строку комментариев автоматически выводятся сообщения об ошибках.

Для работы со строкой комментариев используются функции "вывод символа" (R9025), "вывод строки символов из памяти программ" (R9026) и ""вывод строки символов из памяти данных" (R9027).



Вывод строки символов из памяти программ (R9026)

.CHARSET 1251
; Работа со строкой комментариев
; Вывод строки символов из памяти программ

.ORG 0
	CX		; Очистка регистра X и флага ввода
	6		; Адрес начала текста
	PP M 9026	; Вывод текста из памяти программ
	R/S		; Останов программы

	.TEXT "\rЭто строка комментариев\0"

	; Символ '\r' "возврат каретки" (код 13 или 0Dh) очищает строку комментариев
	; Вместо него можно использовать символ "перевод строки" '\n' (код 10 или 0Ah)
	; Символ '\0' (код 0) обозначает конец строки

  0 1 2 3 4 5 6 7 8 9
00 Cx 6 PP П 90 26 С/П 0Dh 9Dh 'Э' E2h 'т' AEh 'о'
10 20h ' ' E1h 'с' E2h 'т' E0h 'р' AEh 'о' AAh 'к' A0h 'а' 20h ' ' AAh 'к' AEh 'о'
20 ACh 'м' ACh 'м' A5h 'е' ADh 'н' E2h 'т' A0h 'а' E0h 'р' A8h 'и' A5h 'е' A2h 'в'
30 00h                  

Строка комментариев - вывод текста из памяти программ

После останова программа переходит в режим автоматической работы. На экране в строке комментариев выводится текст. В RX содержится число 6 - адрес начала строки символов в памяти программ.

Вся программа занимает 31 байт. Из них 25 байтов - строка символов, а четыре (с 01 по 04) - её вывод.



Вывод строки по номеру

Программа демонстрирует поочерёдный вывод нескольких строк в строку комментариев

Перед запуском в регистр стека RX вводится какое-либо число. Запуск программы выполняется командами "В/О", "С/П".

При вводе чисел 1, 2 или 3 выводится строка с соответствующим номером, в других случаях - сообщение об ошибке.

Для повторного запуска ввести следующее число и нажать "С/П".

.CHARSET 1251
; Работа со строкой комментариев
; Вывод различных строк из памяти программ

.ORG 0			
	MA		; В RA - введённое значение (1, 2 или 3)
	K INT		; Выделить целую часть введённого значения
	+/-		; Изменить знак числа
	F X<0 A0	; Перейти к A0, если введённое значение нулевое или отрицательное 
	1 +		; Если отрицательное (введено положительное) - прибавить единицу
	F X!=0 A1	; Если равно нулю - перейти к выводу строки 1
	1 +		; Если не равно нулю - прибавить единицу
	F X!=0 A2	; Если равно нулю - перейти к выводу строки 2
	1 +		; Если не равно нулю - прибавить единицу
	F X!=0 A3	; Если равно нулю - перейти к выводу строки 2
			; Если не равно нулю - число больше 3
A0:	.NUML STRM0	; Сообщение об ошибке (адрес <100)
	GOTO A5		; Переход к выводу
A1:	.NUML STRM1	; Строка 1 (адрес <100)
	GOTO A4		; Переход к выводу
A2:	.NUML STRM2	; Строка 2 (адрес <100)
	GOTO A4		; Переход к выводу
A3:	.NUML STRM3	; Строка 3 (адрес <100)
A4:	PP M 9026	; Вывод начала строки 1, 2 или 3
	.NUML STRM4	; Окончание строк 1, 2 и 3 (адрес <100)
A5:	PP M 9026	; Вывод строки
	CX ENT ENT	; Очистка стека
	RMA		; Вывод введённого значения в RX
	R/S		; Останов
	GOTO 0		; Переход к началу программы
STRM0:	.TEXT "\rСтрока отсутствует\0"
STRM1:	.TEXT "\rПервая\0"
STRM2:	.TEXT "\rВторая\0"
STRM3:	.TEXT "\rТретья\0"
STRM4:	.TEXT " строка\0"	; Нет символа очистки '\r' - строка продолжается 
				; Пробел в начале строки для разрыва между словами
.ENDP

Программа занимает 98 байт вместе с текcтовыми строками. Поэтому здесь и далее для указания адресов строк используется псевдооператор .NUML (младшая часть адреса), а не .NUM, который следует применять в общем случае.

  0 1 2 3 4 5 6 7 8 9
00 П A K [x] /-/ F x<0 17 1 + F x≠0 21 1
10 + F x≠0 25 1 + F x≠0 29 4 6 БП
20 36 6 6 БП 31 7 4 БП 31 8
30 2 PP П 90 26 9 0 PP П 90 26 Cx
40 B↑ B↑ ИП A С/П БП 00 0Dh 91h 'С' E2h 'т' E0h 'р'
50 AEh 'о' AAh 'к' A0h 'а' 20h ' ' AEh 'о' E2h 'т' E1h 'с' E3h 'у' E2h 'т' E1h 'с'
60 E2h 'т' A2h 'в' E3h 'у' A5h 'е' E2h 'т' 00h 0Dh 8Fh 'П' A5h 'е' E0h 'р'
70 A2h 'в' A0h 'а' EFh 'я' 00h 0Dh 82h 'В' E2h 'т' AEh 'о' E0h 'р' A0h 'а'
80 EFh 'я' 00h 0Dh 92h 'Т' E0h 'р' A5h 'е' E2h 'т' ECh 'ь' EFh 'я' 00h
90 20h ' ' E1h 'с' E2h 'т' E0h 'р' AEh 'о' AAh 'к' A0h 'а' 00h    

Строка комментариев - вывод строки 1

Введено значение 1 - вывод сообщения "Первая строка".

Строка комментариев - вывод ошибки

Введено значение 4 - вывод сообщения "Строка отсутствует".



Вывод строки по номеру с использованием таблицы

Программа демонстрирует вывод нескольких строк в строку комментариев, а также работу с таблицами.

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

Перед запуском в регистр стека RX вводится какое-либо число. Запуск программы выполняется командами "В/О", "С/П".

При вводе чисел 1, 2 или 3 выводится строка с соответствующим номером, в других случаях - сообщение об ошибке.

Для повторного запуска следует ввести очередной номер и нажать "С/П".

.CHARSET 1251
; Работа со строкой комментариев
; Вывод строки из памяти программ по номеру
; С использованием функций работы с таблицами

.ORG 0			
	MA		; В RA - введённое значение (1, 2 или 3)
	.NUML STRM0	; Адрес строки STRM0
	PP M 9026	; Вывод строки
	.NUML TABL	; Адрес начала таблицы строк
	PP M 9042	; Индексный регистр содержимого памяти программ
	RMA		; Введённое значение
	PP M 9213	; Поиск двоично-десятичного значения адреса по индексу
	F X<0 A1	; Если значение найдено - переход к А1
	.NUML STRME	; Если значение не найдено (RX=-1) - ошибка
A1:	PP M 9026	; Вывод строки
	CX ENT ENT	; Очистка стека
	RMA		; Вывод введённого значения
	R/S		; Останов
	GOTO 0		; Переход к началу программы

TABL:			; Таблица пар: индекс - указатель на строку
	.DB 1
	.DA STRM1
	.DB 2
	.DA STRM2
	.DB 3
	.DA STRM3
	.END		; Байт 0FFh - конец таблицы

STRM0:	.TEXT "\rСтрока \0"	; Символ 'r' - очистка строки комментариев
STRM1:	.TEXT "1\0"	; Перед выводом остальных строк очистка не требуется
STRM2:	.TEXT "2\0"
STRM3:	.TEXT "3\0"
STRME:	.TEXT "отсутствует\0"

.ENDP

Программа занимает 66 байт вместе с текcтовыми строками. Адреса 00-28 занимает программа, 29-38 - ассоциативная таблица указателей (адресов строк), 39-65 - текстовые строки.

  0 1 2 3 4 5 6 7 8 9
00 П A 3 9 PP П 90 26 2 9 PP П 90
10 42 ИП A PP П 92 13 F x<0 19 5 4 PP П
20 90 26 Cx B↑ B↑ ИП A С/П БП 00 01h
30 00h 48h 02h 00h 50h 03h 00h 52h FFh 0Dh
40 91h 'С' E2h 'т' E0h 'р' AEh 'о' AAh 'к' A0h 'а' 20h ' ' 00h 31h '1' 00h
50 32h '2' 00h 33h '3' 00h AEh 'о' E2h 'т' E1h 'с' E3h 'у' E2h 'т' E1h 'с'
60 E2h 'т' A2h 'в' E3h 'у' A5h 'е' E2h 'т' 00h        

Строка комментариев - вывод строки 1

Введено значение 1 - вывод сообщения "Строка 1".

Строка комментариев - вывод ошибки

Введено значение 4 - вывод сообщения "Строка отсутствует".



Вывод строки символов из памяти данных (R9027)

.CHARSET 1251
; Работа со строкой комментариев
; Вывод строки символов из памяти данных

STRB	.EQU	1000	; Указатель на строку символов

.ORG 0
	CX		; Очистка регистра X и флага ввода

	; Запись символов в память двоичных данных
	; с использованием косвенной адресации
	.NUMD	STRB	; Указатель на STRB с декрементом
	M4		; Запись указателя в R4 
	13		; Символ '\r' - "возврат каретки"
	KM4		; Косвенная запись с прединкрементом R4
	157	;'Э'
	KM4
	226	;'т'
	KM4
	174	;'о'
	KM4
	32	;'пробел'
	KM4
	225	;'с'
	KM4
	226	;'т'
	KM4
	224	;'р'
	KM4
	174	;'о'
	KM4
	170	;'к'
	KM4
	160	;'а'
	KM4
	CX	; Нулевой символ - конец строки
	KM4

	; Вывод строки символов
	.NUM 	STRB	; Адрес строки в памяти байтовых данных (R1000-R8167)
	PP M 9027	; Функция вывода строки
	R/S		; Останов программы
.ENDP

  0 1 2 3 4 5 6 7 8 9
00 Cx 9 9 9 П 4 1 3 K П 4 1 5
10 7 K П 4 2 2 6 K П 4 1 7 4 K П 4
20 3 2 K П 4 2 2 5 K П 4 2 2 6
30 K П 4 2 2 4 K П 4 1 7 4 K П 4 1
40 7 0 K П 4 1 6 0 K П 4 Cx K П 4 1
50 0 0 0 PP П 90 27 С/П      

Строка комментариев - вывод строки символов из памяти данных R9027

После останова в строке комментариев выводится текст "Это строка". В регистрах стека содержатся последние символы текста: RT='к', RZ='а', RY=0 (конец строки); RX=1000 - адрес выводимой строки в памяти данных.

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



Вывод строки случайных символов из памяти данных

Эта программа может быть использована как простейший "генератор паролей". Данная программа лишь демонстрирует принцип работы, но использовать полученные при её запуске кодовые слова лучше, чем пароли вида "123456" или "qwerty".

Для набора из 12 строчных латинских букв количество возможных вариантов составляет около 1014. Если изменить команды по адресам 14 и 15, к примеру, на 2 и 4, можно вывести строку длиной 24 символа. Это увеличит количество вариантов приблизительно до 1034. При помощи небольшой доработки можно расширить и набор используемых символов.

.CHARSET 1251
; Работа со строкой комментариев
; Формирование строки символов в памяти данных
; Вывод строки символов из памяти данных

STRB	.EQU	1000	; Указатель на строку символов

.ORG 0
	CX		; Очистка регистра X и флага ввода

	; Запись символов в память двоичных данных
	; с использованием косвенной адресации
	.NUMD	STRB	; Указатель на STRB с декрементом
	M4		; Запись указателя в R4 
	13		; Символ '\r' - "возврат каретки"
	KM4		; Косвенная запись с прединкрементом R4
	97		; Символ 'a'
	MA
	26		; Количество символов в латинском алфавите
	MB
	12		; Длина строки	
	M0
A1:	RMB		
	K RAN
	*
	RMA
	+		; Формирование символа от 'a' до 'z' (26*СЧ+97)
	K INT
	KM4		; Запись в строку STRB
	FL0 A1		; Цикл по R0
	CX		; Конец строки
	KM4		

	; Вывод строки символов
	.NUM 	STRB	; Адрес строки в памяти байтовых данных (R1000-R8167)
	PP M 9027	; Функция вывода строки
	R/S		; Останов программы
.ENDP

  0 1 2 3 4 5 6 7 8 9
00 Cx 9 9 9 П 4 1 3 K П 4 9 7
10 П A 2 6 П B 1 2 П 0 ИП B K СЧ ×
20 ИП A + K [x] K П 4 F L0 17 Cx K П 4 1 0
30 0 0 PP П 90 27 С/П        

Строка комментариев - генератор паролей

После останова в строке комментариев выводится кодовое слово. В регистре RX содержится 1000 - указатель на строку в памяти данных.


НПП "СЕМИКО" (383) 271-01-25 (многоканальный)