Язык МК: различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
Строка 1: Строка 1:
''Данный текст взят из справки [[MK.EXE]]''
Полное описание языка МК следует смотреть в эксплуатационной документации
Полное описание языка МК следует смотреть в эксплуатационной документации
или в литературе. Здесь только краткая справка об архитектуре и системе команд.
или в литературе. Здесь только краткая справка об архитектуре и системе команд.


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


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


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


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


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


* Команда отсутствовала в советских ПМК МК-61, МК-52
* Команда отсутствовала в советских ПМК [[МК-61]], [[МК-52]]
** Действие команды не совпадает с МК-61, МК-52
** Действие команды не совпадает с [[МК-61]], [[МК-52]]
+1 После кода команды следует один байт
+1 После кода команды следует один байт
+2 После кода команды следует два байта
+2 После кода команды следует два байта


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

Версия от 09:14, 23 марта 2014

Данный текст взят из справки 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	После кода команды следует два байта

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