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

Материал из ПМК вики
Перейти к навигации Перейти к поиску
(Арви Хэкер переименовал страницу Язык МК в Язык МК (1.24))
 
Нет описания правки
Строка 1: Строка 1:
#перенаправление [[Язык МК (1.24)]]
Полное описание языка МК следует смотреть в эксплуатационной документации
или в литературе. Здесь только краткая справка об архитектуре и системе команд.
 
Язык МК основан на языке программирования советских микрокалькуляторов
МК-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 После кода команды следует два байта
 
В файле исходного текста операторы могут записываться строчными буквами
и без пробелов. Допускается запись нескольких операторов в строке.
При этом следует учитывать возможные неоднозначности.

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

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

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

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