Интернет магазин китайских планшетных компьютеров



Компьютеры - Malbolge - Hello world

09 мая 2011


Оглавление:
1. Malbolge
2. Hello world
3. Примеры



Эта программа на Malbolge отображает «Hello, world.»:

M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk**hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O<

Виртуальная машина

Malbolge — это машинный язык для виртуальной машины, работающей в троичной системе счисления.

Регистры

В виртуальной машине Malbolge есть три регистра: a, c и d. Регистр c – регистр кода, используемый в качестве указателя на текущую команду. Регистр d – регистр данных, используемый для управления данными. Регистр a – аккумулятор, также используемый некоторыми командами для манипуляции данными. При запуске программы все регистры равны нулю.

Память

Размер памяти виртуальной машины — 59049 ячеек с числами из 10 троичных цифр. Все ячейки с адресами от 0 до 59048 имеют значения от 0 до 59048. Все изменения происходят по модулю 59049. При запуске программы начало памяти заполняется ASCII-кодами символов её исходного текста. Символы пустого пространства игнорируются, а остальные символы должны быть командами Malbolge. Остаток памяти заполняется с использованием операции crazy: = crz,.

Команды

В Malbolge есть 8 команд. Виртуальная машина определяет, какую команду выполнять, следующим образом: к значению ячейки с адресом c прибавляется значение c, а в качестве команды выступает остаток от деления этого числа на 94. Таблица действий интерпретатора:

Команды
Значение
 % 94
Инструкция Пояснение
4 mov c,  Переход к ячейке с номером .
5 out a Вывод значения ASCII-символа с кодом a % 256 на экран.
23 in a Ввод ASCII-символа в a. Разделитель строк имеет код 10. Конец файла — 59048.
39 rotr 
mov a, 
Поворачивает значение на одну троичную цифру вправо. Результат сохраняется в и в a.
40 mov d,  Копирование значения из в d.
62 crz , a
mov a, 
Произвести операцию crazy со значениями и a. Результат сохраняется в и в a.
68 nop Ничего не делает.
81 end Конец программы.
Любые другие значения ничего не делают. Они не разрешены при загрузке программы, но разрешены после этого.

После выполнения каждой инструкции она шифруется операцией Crazy. После этого значения c и d увеличиваются на 1 и выполнение продолжается со следующей инструкции.

Операция crazy

Операция является аналогом побитовых операций — она применяется к двум соответствующим цифрам.

Операция crazy
crz 2-я цифра
0 1 2
1-я цифра 0 1 0 0
1 1 0 2
2 2 2 1

Шифрование

После того, как очередная инструкция выполнена, инструкция шифруется с помощью следующей таблицы перевода:

!"#$%&'*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`abcdefghijklmnopqrstuvwxyz{|}~
5z]&gqtyfr$H-Zn,[%\3dL+Q;>U!pJS72FhOA1CB6v^=I_0/8|jsb9m<.TVac`uY*MK'X~xDl}REokN:#?G"i@

то есть ! становится 5 и т. д.



Просмотров: 2661


<<<