Программный калькулятор для ЭКВМ


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

Описание

Программа предназначена для изучения возможностей графического интерфейса пользователя и является примером использования экранных форм. Несмотря на небольшой размер (271 байт) она выполняет функции сложения, вычитания, умножения и деления чисел в естественном виде и с плавающей запятой.

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

Для ввода первого числа следует нажать клавишу ВВОД. В появившемся в нижней части экрана окне появится поле ввода числа. Ввод происходит аналогично вводу в регистр RX ЭКВМ и завершается нажатием клавиши ВВОД. Клавиша ВЫХОД позволяет выйти из поля ввода числа без изменения ранее установленного значения.

После нажатия клавиши ВВОД число вводится в калькулятор.

Для изменения выполняемой операции необходимо нажать клавишу ВЫБОР (например, стрелку вниз).

Нажатием клавиши ВВОД установить требуемое действие: сложение, вычитание, умножение или деление.

Затем клавишей ВЫБОР выбрать второе число и нажать клавишу ВВОД.

Набрать требуемое число.

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

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

Для изменения опереции следует выбрать знак действия и нажать клавишу ВВОД требуемое количество раз. Здесь показано деление чисел.

Сложение. Результат выводится на экран сразу после выбора нужного действия.

Вычитание. Для действий с другими числами следует ввести их как было показано выше.

Впрочем, для вычисления значения 7×8=56 с использованием обратной польской нотации достаточно нажать на ЭКВМ клавиши 7 ↑ 8 ×, что гораздо быстрее и удобнее.

Программа может выполнять действия с отрицательными числами. Для ввода отрицательных значений нужно нажать клавишу /-/. Для ввода показателя степени - клавишу ВП.

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

Программа "Калькулятор"

Программа размещается в памяти программ ЭКВМ с нулевой страницы. Программа использует графический интерфейс пользователя (ГИ) и может выполняться на МК-152 с ПО версии v1.18 и МК-161 с v1.06.

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


Файл calc-1.1.mkp - программа на ЯМК (КС 27418/98)

Файл calc-1.1.mkl - текст для кросс-компилятора

  0 1 2 3 4 5 6 7 8 9
000 Cx П C П D П E PP П 92 02 PP П 92 03
010 PP П 10 01 1 П 9 PP П 92 00 ВП 3
020 П 8 3 П B 4 3 K П 8 1 2 8 PP П
030 92 01 6 4 PP П 92 08 PP ИП 92 09
040 F x≠0 70 1 - F x=0 54 ИП B 1 - П B
050 F x<0 54 3 П B 1 П 9 0 8 0 PP П
060 90 42 ИП B PP П 92 11 П 7 K ПП 7 БП 32
070 PP ИП 90 29 П A K NOT F x≠0 70 ИП A БП 34
080 1 ÷ 1 4 0 K x≥0 6 0 K БП 8 4 3
090 K П 8 ИП C ИП D + П E В/О 4 5 K П 8 ИП C
100 ИП D - П E В/О 1 7 9 K П 8 ИП C ИП D
110 × П E В/О 1 7 6 K П 8 ИП D F x=0 23
120 Cx П 9 В/О ИП C ИП D ÷ П E В/О 00h 1
130 ИП 9 FFh 8Ah 'К' A0h 'а' ABh 'л' ECh 'ь' AAh 'к' E3h 'у' ABh 'л' EFh 'я'
140 E2h 'т' AEh 'о' E0h 'р' 20h ' ' 76h 'v' 31h '1' 2Eh '.' 31h '1' 00h 8Eh 'О'
150 E8h 'ш' A8h 'и' A1h 'б' AAh 'к' A0h 'а' 20h ' ' A4h 'д' A5h 'е' ABh 'л' A5h 'е'
160 ADh 'н' A8h 'и' EFh 'я' 20h ' ' ADh 'н' A0h 'а' 20h ' ' 30h '0' 00h 02h
170 08h 0Bh 0Bh 12h 11h 15h 4Bh 05h 0Dh 05h
180 FEh 00h 00h 00h FEh 00h 01h 02h 00h 01h
190 65h 00h 60h 18h 00h 53h 10h 01h 32h 60h
200 08h 2Dh 59h 03h 70h 01h 60h 0Ah 0Ah 5Ch
210 10h 00h 12h 60h 0Ah 14h 55h 10h 10h 00h
220 60h 0Ah 1Eh 5Ch 10h 00h 13h 60h 0Ah 32h
230 01h 00h 09h 46h 53h 10h 01h 49h FFh 5Ch
240 10h 00h 14h FFh 4Eh 56h 5Bh 4Dh 00h 12h
250 60h 08h 09h 38h 61h 60h 08h 13h 38h 61h
260 4Dh 00h 13h 60h 08h 1Dh 59h 03h 70h 0Bh
270 FFh                  

Исходный текст для кросс-компилятора

Файл 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 (многоканальный)