Вывод текста в строку комментариев |
Главная / ЭКВМ / Программы / Примеры |
Строка комментариев располагается в нижней строке экрана ЭКВМ и выводится на экран в режиме автоматической работы, а также при выполнении программы, после исполнения команды "К ЭКР". В строку комментариев автоматически выводятся сообщения об ошибках. Для работы со строкой комментариев используются функции "вывод символа" (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) обозначает конец строки
Вывод строки по номеруПрограмма демонстрирует поочерёдный вывод нескольких строк в строку комментариев Перед запуском в регистр стека 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, который следует применять в общем случае.
Вывод строки по номеру с использованием таблицыПрограмма демонстрирует вывод нескольких строк в строку комментариев, а также работу с таблицами. Программа аналогична предыдущей, но для организации ветвления вместо операторов условного перехода используется выбор адреса из таблицы. Перед запуском в регистр стека 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 - текстовые строки.
Вывод строки символов из памяти данных (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
Вывод строки случайных символов из памяти данныхЭта программа может быть использована как простейший "генератор паролей". Данная программа лишь демонстрирует принцип работы, но использовать полученные при её запуске кодовые слова лучше, чем пароли вида "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
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
НПП "СЕМИКО" (383) 271-01-25 (многоканальный) |