Язык МК

Материал из ПМК вики
Перейти к: навигация, поиск

Данный текст взят из справки MK.EXE

Полное описание языка МК следует смотреть в эксплуатационной документации или в литературе. Здесь только краткая справка об архитектуре и системе команд.

Язык МК основан на языке программирования советских микрокалькуляторов МК-61 и МК-52, поэтому для ознакомления можно использовать литературу по этим калькуляторам. Значительная часть программ советских калькуляторов может выполняться на МК без каких-либо изменений.

Основа архитектуры МК - стек, состоящий из четырех регистров: X, Y, Z и T. Большинство операций выполняются над X и Y.

МК имеет 10000 ячеек памяти программ, разбитых на 100 страниц, и может обращаться к 10000 регистрам. Из них первые 1000 хранят десятичные числа, остальные служат для работы с байтами, текстом и обращения к дополнительным функциям.

Команды МК могут быть записаны как в латинской, так и в русской транскрипции. Для ручного ввода и публикации в формате HTML более привычны русские обозначения. Для компилятора, по историческим причинам, предпочтительны латинские.

Значение HEX	Команда	Описание
00-09	0-9	Ввод цифр
0A	,	Ввод десятичной запятой 
0B	+/-	/-/ Смена знака 
0C	EE	ВП - Ввод порядка 
0D	CX	Cx - Сброс X
0E	ENT	В^ - Ввод в стек
0F	F ANS	F Bx - Вызов в X предыдущего результата из X1
10	+	Сложение
11		Вычитание
12	×	Умножение
13	÷	Деление
14	<->	Обмен содержимого X и Y
15	F 10^X	Десять в степени X
16	F EXP	e(2,71828...) в степени X
17	F LG	Десятичный логарифм
18	F LN	Натуральный логарифм 
19	F ARCSIN	Арксинус
1A	F ARCCOS	Арккосинус
1B	F ARCTG	Арктангенс
1C	F SIN	Синус
1D F COS	Косинус
1E	F TG	Тангенс
1F		Не используется
20	F PI	Занесение в стек числа Пи (3,14159...) 
21	F SQRT	Квадратный корень
22	F X^2	Возведение в квадрат
23	F 1/X	Обратная величина
24	F X^Y	Возведение X в степень Y
25	F R	Кольцевое передвижение информации в стеке
26	K M->D	Перевод минут в доли градуса
27	K -	Аварийный останов
28	K PRGM	К ИПРГ - Считывание байта из памяти программ *
29	K /	Аварийный останов
2A	K MS->D	Перевод минут и секунд в доли градуса 
2B-2F		Не используется
30	K D->MS	Перевод долей градуса в минуты и секунды
31	K ABS	K |x| - Абсолютное значение
32	K SGN	К ЗН - Определение знака числа
33	K D->M	Перевод долей градуса в минуты
34	K INT	K [x] - Выделение целой части
35	K FRAC	K {x} - Выделение дробной части
36	K MAX	Определение максимального значения **
37	K AND	Логическое умножение **
38	K OR	Логическое сложение **
39	K XOR	Логическое сложение по модулю 2 **
3A	K NOT	Логическая инверсия **
3B	K RAN	К СЧ - Генерация случайного числа от 0 до 1 **
3C-3F		Не используется 
40-4E	M0-ME	П0-ПЕ - Запись в память 
4F	PM	РП - Запись в память регистра 0-99 (+1)
50	R/S	С/П - Останов и пуск вычислений
51	GOTO	БП - Безусловный переход в пределах страницы (+1)
52	RTN	В/О - Возврат из подпрограммы
53	GSB	ПП - Переход на подпрограмму в пределах страницы(+1)
54	K NOP	К НОП - Нет операции
55	K SCR	К ЭКР - Обновление экрана *
56	K GRPH	К ГРФ - Вывод графической информации *
57	F X!=0	Переход по условию в пределах страницы (+1)
58	F L2	Цикл с R2 в пределах страницы (+1)
59	F X>=0	Переход по условию в пределах страницы (+1)
5A	F L3	Цикл с R3 в пределах страницы (+1)
5B	F L1	Цикл с R1 в пределах страницы (+1)
5C	F X<0	Переход по условию в пределах страницы (+1)
5D	F L0	Цикл с R0 в пределах страницы (+1)
5E	F X=0	Переход по условию в пределах страницы (+1)
5F		Не используется **
60-6E	RM 1- RM E	ИП0-ИПЕ - Вызов содержимого регистра
6F	P RM	Вызов содержимого регистра 0-99 (+1) *
70-7E	K X!=0 0 - K X!=0 E	Косвенный переход по условию по содержимому R0-RE
7F	PK X!=0	Косвенный переход по условию по содержимому R0-R99 (+1) *
80-8E	K GOTO 0 - K GOTO E	КБПR - Косвенный безусловный переход по содержимому R0-RE
8F	PK GOTO	Косвенный безусловный переход по содержимому R0-R99 (+1) *
90-9E	K X>=0 0 - K X>=0 E	Косвенный переход по условию по содержимому R0-RE
9F	PK X>=0	Косвенный переход по условию по содержимому R0-R99 (+1) *
A0-AE	K GSB 0 - K GSB E	КППR - Косвенный переход на подпрограмму по содержимому R0-RE 
AF	PK GSB	Косвенный переход на подпрограмму по содержимому R0-R99 (+1) *
B0-BE	K M 0 - K M E	КПR - Косвенная запись по содержимому R0-RE
BF	PK M	Косвенная запись по содержимому R0-R99 (+1) *
C0-CE	K X<0 0 - K X<0 E	Косвенный переход по условию по содержимому R0-RE
CF	PK X<0	Косвенный переход по условию по содержимому R0-R99 (+1) *
D0-DE	K RM 0 - K RM E	КИПR - Косвенный вызов в стек по содержимому R0-RE 
DF	PK RM	Косвенный вызов в стек по содержимому R0-R99 (+1) *
E0-EE	K X=0 0 - K X=0 E	Косвенный переход по условию по содержимому R0-RE
EF	PK X=0	Косвенный переход по условию по содержимому R0-R99 (+1) *
F0		Не используется
F1	P GOTO	Р БП - Безусловный переход (+2) *
F2	PP RTN	PP В/О - Возврат из прерывания *
F3	P GSB	Р ПП - Переход на подпрограмму (+2) *
F4	PP M	РР П - Запись R0-R9999 (+2) *
F5		Не используется
F6	PP RM	РР ИП - Вызов R0-R9999 (+2) *
F7	P X!=0	Переход по условию (+2) *
F8	PF L2	Цикл по R2 (+2) *
F9	P X>=0	Переход по условию (+2) *
FA	PF L3	Цикл по R3 (+2) *
FB	PF L1	Цикл по R1 (+2) *
FC	P X<0	Переход по условию (+2) *
FD	PF L0	Цикл по R0 (+2) *
FE	P X=0	Переход по условию (+2) *
FF		Не используется
	*	Команда отсутствовала в советских ПМК МК-61, МК-52
	**	Действие команды не совпадает с МК-61, МК-52
	+1	После кода команды следует один байт
	+2	После кода команды следует два байта

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

Ссылки[править]