С.Ю. СИНЯГИН
(г. Дубна)
ВЫВОД ТЕКСТОВ НА ЭКРАН
Я работаю не в машинных кодах, а в их более прогрессивном варианте - на Ассемблере. Ассемблер БК реализован во многих системах. Я же рекомендую две из них - систему МИРАЖ (С. Зильберштейна) и систему МИКРО (группы ASP).
Свои программы я оформил в варианте системы МИРАЖ. Они начинаются с символического адреса 0, но их можно расположить в любом месте ОЗУ. Обращаться к программам командой CALL (в системе МИРАЖ команда CALL заменяет команду JSR PC, а команда RET - команду RTS PC).
При обращении к программе «Вывод текстов на экран» нужно лишь в R3 указать номер выводимого текста в списке. В конце каждого текста должен стоять код 3 (клавиша КТ). Тексты располагаются друг за другом, первый имеет номер 1, следующий 2 и т.д. Не рекомендуется задавать номер большим, чем количество текстов в списке. В программе параметр «А» - начальный адрес текстов.
0) MOV #A,R1 4) DEC R3 6) BLE 20 10) СМРВ (R1)+,#3 14) BNE 10 16) BR 4 20) MOV #1400,R2 24) EMT 20 26) RET
Комментарий рецензента
Так как практически любая несистемная программа имеет вывод на экран, то стремление упростить и унифицировать эту процедуру можно только приветствовать
В системе команд БК0010 имеется команда ЕМТ 20, позволяющая выводить строку текста на экран, но задание ей параметров сопряжено с некоторыми вычислениями в восьмеричной и двоичной системах счисления. Обычно программисты не задумываясь пишут её всякий раз, когда хотят что-нибудь вывести на экран, подготавливая для этого соответствующие параметры. Предложение С. Синягина позволяет несколько сэкономить память и уменьшить количество ошибок при отладке. Недостатком предложения является то, что при достаточно большом количестве символов в пакете текстов увеличивается время поиска выводимого на экран текста. Дополнительно к предложенной программе предлагаю текст этой уточнённой программы для версии ассемблера МИКРО 8 и соответствующий ему машинный код:
000000 012701 MOV #A,R1 000002 A 000004 005303 4: DEC R3 000006 003404 BLE 20 000010 122721 10: CMPB #3,(Rl)+ 000012 000003 000014 001375 BNE 10 000016 000772 BR 4 000020 012702 20: MOV #1400,R2 000022 001400 000024 104020 EMT 20 000026 000207 RTS PC
ГОЛОС ВАШЕЙ ПРОГРАММЫ
Это программа обработки запросов по прерыванию TRAP. Чем больше аргумент команды TRAP, тем ниже тон звука. Несмотря на то что звуки разной тональности, их длительность одинакова - около 0,5 с. Перед обращением к программе в ячейку с адресом 34 следует занести адрес программы.
0) MOV R5,-(SP) 2) MOV 2(SP),R5 6) MOV -(R5),R5 10) BIC #177400,R5 14) ASL R5 16) ASL R5 20) JSR R4,@ #110346 24) MOV #1000,R1 30) SUB R5,R1 32) MOV R5,R0 34) BIS #100,@ #177716 42) SOB R0,42 44) MOV R5,R0 46) BIC #100,@#177716 54) SOB R0,54 56) SOB R1,32 60) JSR (SP)+,R5 62) MOV R4,@#110362 66) RTI
Комментарий рецензента
Предложенная программа может скрасить «серые будни» программистов при отладке программ на языках БЕЙСИК, Ассемблер или ФОКАЛ. Её можно использовать в качестве иллюстрации к обработке прерываний.
В №9/1988 в вашем журнале на стр. 26 указывалась программа работы с магнитофоном по адресу 100602. Но если покопаться в мониторе, можно обнаружить интересную программу по адресу 100536. Она запрашивает имя файла на чтение файла и загружает его. В R5 надо указать адрес для чтения. После определённых манипуляций можно заставить эту программу запрашивать имя для записи файла на плёнку.
ЕМТ 6 BICB #240,R0
Интересным свойством обладает последовательность команд. В каком бы режиме вы ни работали, в латинских или русских, заглавных или строчных буквах, при нажатии буквенной клавиши в младшем байте R0 будет код соответствующей заглавной латинской буквы.
Рецензию подготовил Л.Н. Жариков