Что если ассемблер делать для машины Поста?
Красота же - минимальный набор инструкций, независимость от конкретной аппаратуры (переносимость).
Машина Поста состоит из разбитой на ячейки бесконечной в обе стороны ленты (но в принципе и в одну сторону бесконечности достаточно),
ячейка ленты может быть 0 или 1.
И каретки (т.е. считывающей и записывающей головки),
за такт работы каретка может:
0) записать символ 0
1) записать символ 1
2) сдвинуться на одну позицию влево
3) сдвинуться на одну позицию вправо
4) считать символ в своей текущей позиции
Программа для машины Поста состоит из пронумерованных строк вида
[i] K [j]
i — номер команды, K — действие каретки, j — номер следующей команды
если j не указано, то выполняется следующая по порядку команда
команды есть:
- четыре команды для каретки
- команда безусловного перехода (на строку j)
- команда условного перехода (на строку j, если под кареткой 1)
- команда останова
Итого 7 штук, можно ещё добавить (чтобы было 8 штук, с целью закодировать в 3 бита):
- команда условного перехода (на строку j, если под кареткой 0)
Например:
000 - останов
001 - безусловный переход
010 - перейти если 0
011 - перейти если 1
100 - записать 0
101 - сдвинуть каретку вправо
110 - сдвинуть каретку влево
111 - записать 1
Тут неясно, как будет кодироваться номер строки программы (сколькими битами),
ну, пусть 64-3 = 61 бит на номер строки программы
Можно придумать мнемоники для команд:
СТОП
ПЕРЕХОД 0000000000
ЕСЛИНОЛЬ 0000000000
ЕСЛИОДИН 0000000000
НОЛЬ
ВЛЕВО 0000000000
ВПРАВО 0000000000
ОДИН
Ну и теперь можно написать ассемблер, интерпретатор
затем на ассемблере можно будет писать программы,
например если в команде СТОП параметром указывать, сколько первых битов записать в стандартный вывод в качестве результата работы.
в начале работы ленту считывать из стандартного ввода.
И тогда можно будет переписать ассемблер на самом себе.
ну, ещё сделать метки, пример команд с меткой:
ПЕРЕХОД МеткаКонца
МеткаКонца: СТОП 000001000000
меня только смущает, как оно без регистра аппаратного стека работает. Но ведь работает как-то?
Отредактировано Лис (2022-05-29 11:27:07)