Описание ЯОЛС-М

Программы на языке ЯОЛС-М состоят из строк, содержащих не более одного оператора на строку.
Основные элементы языка:

Структура

Для задания переменных в ЯОЛС-М используется оператор объявить. Это декларативный оператор с следующим синтаксисом:

объявить имя_переменной(размер)

Где имя_переменной - имя переменной/участка памяти/регистра, что может включать латинницу, кириллицу, знак подчеркивания _, и цифры (но не может начинаться с цифры), а размер - длина переменной, в битах.

Например, если мы хотим обозначить регистр Р0, что может принимать значения от 0 до 31 (25-1), строка объявления будет выглядеть так:

объявить р0(5)

Если нужно задать несколько переменных, это может быть сделано отдельными строками, или же через запятую в одной строке:

объявить имя_переменной1(длина1), имя_переменной2(длина2)

Если необходимо регистр Р0 размером 5 бит, и регистр Р1 размером 9 бит, это можно было бы сделать следующим образом:

объявить р0(5), р1(9)

Для объявления памяти (или массива), перед размером добавляется вторая скобка с количеством ячеек:

объявить п(256)(32)

Это объявит переменную "п" (память) с 256-ю ячейками размером по 32 бит.

Данные

ЯОЛС-М поддерживает указание числовых значений в десятичной, двоичной, и шестнадцатеричной системах счисления.
Данные в десятичной системе указываются следующим образом:

21
42

Данные в шестнадцатеричной системе указываются с префиксом $:

$15
$2A

Данные в двоичной системе указываются с префиксом #:

#010101
#101010

Комментарии

В языке ЯОЛС-М поддерживаются как однострочные, так и многострочные комментарии.
Однострочные комментарии начинаются с символа %, и распространяются до конца текущей строки:

% текст комментария

Многострочные комментарии начинаются с символа {, и прерываются символом }:

{
Это текст многострочного комментария.
Он не влияет на ход выполнения программы.
}

Многострочные комментарии так же могут быть использованы для исключения фрагментов кода из текста микро-программы,

Строки

ЯОЛС-М предполагает использование строк в операциях ввода-вывода, ограничивая их одинарными или двойными кавычками:

'Текст'
"Текст"

В случае потребности вывода самих кавычек, строка может быть указана в другом количестве кавычек, то есть:

'Текст "в кавычках"'
"Текст 'в кавычках'"

Будут одинаково верны. Для большей гибкости, ЯОЛС-М так же поддерживает экранирование символов в формате, аналогичном C/C++ (\', \", \n, ...).

Метки

Метки (англ. label) используются для указания смещений в микропрограмме.
Синтаксис меток в ЯОЛС-М мало чем отличается от общепринятого:

имя_метки:

Подобно переменным, имена меток могут содержать латиницу, кириллицу, и цифры:

метка1:
2:

Ввод

Для получения данных от пользователя, в ЯОЛС-М используется оператор ввести:

ввести имя_переменной

Где имя_переменной - имя переменной, объявленной с помощью оператора объявить.
То есть, для ввода пользователем значения переменной р0 может быть использован следующий код:

ввести р0

Во время выполнения, оператор ввести приостанавливает выполнение микропрограммы, и отображает поле ввода правой секции.

Данные могут вводится в одном из трех форматов (двоичном, шестнадцатеричном, или десятичном), после чего значение записывается в переменную и программа продолжает работу.

Аналогично оператору объявить, можно передать несколько аргументов через запятую, что для данного оператора будет означать ввод подряд значений нескольких переменных:

ввести р0, р1

Размеры поля ввода автоматически подстраиваются под длину переменной.

Вывод

Для вывода значений на экран, в ЯОЛС-М поддерживается оператор печать:

печать значение

Где значение - имя переменной, число, или строка.
Подобно ранее описанным операторам, печать так же может принимать более одного аргумента, что позволяет выводить несколько значений на одной строке:

печать "р0:", р0

Вывод значений переменных идет в трёх системах счисления (двоичной, шестнадцатеричной, десятичной), аналогично формату ввода.

Операции

Для проведения операций над значениями, в ЯОЛС-М предусмотрен оператор операция:

операция переменная действие значение

Где переменная - ранее заданная переменная, значение - константа, или же другая переменная, а действие может быть одним из множества поддерживаемых действий, таких как:

+: Сложение
-: Вычитание
&: Битовое "И"
|: Битовое "ИЛИ"
^: Битовое исключающее "ИЛИ" (так же известно, как сложение по модулю 2)
<<: Сдвиг влево
>>: Сдвиг вправо
|<, <<<: Цикличный сдвиг влево
>|, >>>: Цикличный сдвиг вправо
+!: Сложение с цикличным переносом

Слово "операция" писать не обязательно.
Сложение двух регистров может быть проведено так:

р0 + р1

Помимо описанных выше операторов, ЯОЛС-М так же поддерживает оператор инверсии !, не требующий второго аргумента. Так, для инверсии значения регистра может быть использован следующий код:

р0!

Безусловный переход

Оператором безусловного перехода в ЯОЛС-М является идти_к:

идти_к имя_метки

Где имя_метки - имя существующей метки.
Например, следующий код "обойдет" вывод текста:

идти_к метка1
печать "Невыводимый текст"
метка1: печать "Выводимый текст"

Условный переход

Для разветвлений и проверок, в ЯОЛС-М есть оператор если:

если значение1 сравнение значение2 то действие

Где сравнение - оператор сравнения, такой, как =, <>, <, <=, >, >=, а действие - запускаемый в случае выполнения условия оператор.
Например, для проверки соответствия значения регистра можно использовать следующий код:

если р0 = 4 то печать "р0 равен 4."

Для краткости, ключевое слово "то" может быть опущено.
Оператор идти_к может быть использован вместе с оператором если для получения условного перехода.

Завершение

По умолчанию, программа на языке ЯОЛС-М завершает свое выполнение по достижению конца программы (перехода за последнюю строку). Но, в случае необходимости, процесс выполнения программы так же может быть завершен насильно с помощью оператора конец:

конец

Для простоты использования, так же можно указать строку с причиниой прекращения выполнения, например:

конец "Переполнение."

Выведет текст "Переполнение." и завершит выполнение программы.