Программный калькулятор для ЭКВМ |
Главная / ЭКВМ / Программы для ЭКВМ / Прикладные задачи |
ОписаниеПрограмма предназначена для изучения возможностей графического интерфейса пользователя и является примером использования экранных форм. Несмотря на небольшой размер (271 байт) она выполняет функции сложения, вычитания, умножения и деления чисел в естественном виде и с плавающей запятой.
Впрочем, для вычисления значения 7×8=56 с использованием обратной польской нотации достаточно нажать на ЭКВМ клавиши 7 ↑ 8 ×, что гораздо быстрее и удобнее. Программа может выполнять действия с отрицательными числами. Для ввода отрицательных значений нужно нажать клавишу /-/. Для ввода показателя степени - клавишу ВП. Ошибка деления на 0 блокируется программой калькулятора. Вместо результата операции при этом выводится сообщение об ошибке. Программа "Калькулятор"Программа размещается в памяти программ ЭКВМ с нулевой страницы. Программа использует графический интерфейс пользователя (ГИ) и может выполняться на МК-152 с ПО версии v1.18 и МК-161 с v1.06. Запуск программы производится нажатием клавиш "В/О", "С/П". Останов выполнения программы - нажатием "С/П". Файл calc-1.1.mkp - программа на ЯМК (КС 27418/98) Файл calc-1.1.mkl - текст для кросс-компилятора
Исходный текст для кросс-компилятораФайл calc.mkl .CHARSET 1251 ; Файл calc ; Версия 1.1 - для работы с ПО МК-152 v1.20 и аналогичных ; Команды языка ГИ: TAB .EQU 96 LDX .EQU 104 LDY .EQU 105 TYPE .EQU 101 ATYPE .EQU 78 LDADR .EQU 77 SQU .EQU 89 FRAME .EQU 91 DRAWP .EQU 84 DRAWB .EQU 86 TXTP .EQU 83 TXTB .EQU 85 TXTK .EQU 87 PREXP .EQU 92 PRFORM .EQU 93 PRHEX .EQU 94 MCALL .EQU 102 RETUM .EQU 103 LCALL .EQU 112 RETUL .EQU 113 JNEZ .EQU 1 JM .EQU 56 END .EQU 255 .ORG 0 CX MC MD ME PP M 9202 PP M 9203 PP M 1001 1 M9 PP M 9200 EE 3 M8 3 MB 43 ; '+' KM8 .NUMT TFORM PP M 9201 A00: 64 A0: PP M 9208 PP RM 9209 F X!=0 A2 1 - F X=0 A1 ; переключение действия RMB 1 - MB F X<0 A1 3 MB A1: ; действие 1 M9 ; очистить флаг ошибки .NUMT TCALC PP M 9042 RMB PP M 9211 M7 K GSB 7 GOTO A00 A2: PP RM 9029 ; Чтение кода клавиши и очистка буфера (Буфер клавиатуры) MA K NOT F X!=0 A2 RMA GOTO A0 TCALC: .DA CALC3, CALC2, CALC1, CALC0 CALC0: 43 KM8 ; '+' RMC RMD + ME RTN CALC1: 45 KM8 ; '-' RMC RMD - ME RTN CALC2: 179 KM8 ; 'x' RMC RMD * ME RTN CALC3: 176 KM8 ; ':' RMD F X=0 CALC31 CX M9 RTN ; /0 CALC31: RMC RMD / ME RTN TFORM: .DB 0h .DA F0 .DB 0FFh TXT1: .TEXT "Калькулятор v1.1\0" TXT2: .TEXT "Ошибка деления на 0\0" .BASE ; Форма 0 - заголовок F0: .DB 2 ;максимальный номер элемента .DBB F0DE, F0PI, F0PO, F0PL, F0PR, F0RI, F0KM F0DE: ;таблица флагов действий .DB 5,13,5 ; 5= 0101, 13= 1101 F0PO: F0PI: .DB 0FEh,0,0,0,0FEh,0 ;F0PO: .DB 0,0,0,0,0,0 F0PR: .DB 1 F0PL: .DB 2,0,1 F0RI: ; рисунок экранной формы .DB TYPE, 0 .DB TAB, 24, 0 ; позиция 36,0 .DB TXTP, 16 .DA TXT1 .DB TAB, 8, 45 ; позиция 8,45 .DB SQU, 3, 112, 1 ; линия (прямоугольник 112 x 1) .DB TAB, 10, 10 ; позиция 10,10 .DB PREXP, 16, .DA 12 ; число естественное из регистра 12 (атрибуты 0, расстояние 1) .DB TAB, 10, 20 ; позиция 10,20 .DB TXTB, 16 .DA 1000 ; строка из памяти двоичных данных 1000 .DB TAB, 10, 30 ; позиция 10,30 .DB PREXP, 16 .DA 13 ; число естественнное из регистра 13 (атрибуты 0, расстояние 1) .DB TAB, 10, 50 ; позиция 10,50 .DB JNEZ .DA 9 .DBB F0RI1 .DB TXTP, 16 .DA TXT2 .DB END F0RI1: .DB PREXP, 16 .DA 14 ; число естественнное из регистра 14 (атрибуты 0, расстояние 1) .DB END F0KM: .DBB F0KM0, F0KM1, F0KM2 F0KM0: .DB LDADR .DA 12 ; загрузка адреса для ввода 12 .DB TAB, 8, 9 ; позиция 8,9 .DB JM ; переход к .DBB F0KME F0KM1: .DB TAB, 8, 19 ; позиция 8,19 .DB JM ; переход к .DBB F0KME F0KM2: .DB LDADR .DA 13 ; загрузка адреса для ввода 13 .DB TAB, 8, 29 ; позиция 8,29 F0KME: .DB SQU, 3, 112, 11 ; вывод прямоугольника с атрибутами 3 размер 112 x 11 .DB END .END |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
НПП "СЕМИКО" (383) 271-01-25 (многоканальный) |