Язык МК: различия между версиями
AtH (обсуждение | вклад) Нет описания правки |
AtH (обсуждение | вклад) Нет описания правки |
||
Строка 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 | [[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 | [[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 | [[24]] [[F X^Y]] Возведение [[RX|X]] в степень [[RY|Y]] | ||
25 F R Кольцевое передвижение информации в стеке | [[25]] [[F R]] Кольцевое передвижение информации в стеке | ||
26 | [[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 | [[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 | [[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 Вызов содержимого регистра | [[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 | [[C0]]-[[CE]] [[C0|K X<0 0]] - [[CE|K X<0 E]] Косвенный переход по условию по содержимому [[R0]]-[[RE]] | ||
CF | [[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 | [[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 | [[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]] | |||
+1 После кода команды следует один байт | |||
+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 После кода команды следует два байта
В файле исходного текста операторы могут записываться строчными буквами и без пробелов. Допускается запись нескольких операторов в строке. При этом следует учитывать возможные неоднозначности.