Применение искинов - шоссе империализма (Стенгазета русификаторов ИТ)

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Дамп

Сообщений 1 страница 3 из 3

1

Итак, можно, конечно писать машкод. Но если подумать, то с исчезнованием инструкций (всех, кроме Б), исчезают так же инструкции перехода. Это значит, что метки и алгоритм расчёта длин переходов становятся ненужными. А раз нет меток, то можно упростить и синтаксис. Оставить только сами значения байтов в шестнадцатиричной записи. Машкод не нужен.

Т.е. программа должна считывать входной поток в фиксированном формате, примерно таком:
0А БВ 23 42 0Д БА 43 41 01 1В 23 45 5А 00 32 99 1111
17 В0 55 2С 00 00 00 00 00 00 00 00 00 00 00 00 2222

Чтобы исключить ошибки при вводе, в конец каждой строки можно добавить CRC-16, считаемую от байтов строки (чтобы не напутать в этих байтах), и от предыдущей CRC-16 (чтобы не пропустить строки, как в блокчейне).

Это остаётся русскоязычным программированием, так как для цифр больше 10 используются русские буквы.

(может, как в старину, заменить все цифры на первые 16 букв алфавита? Так же будет исконнее и самобытнее (без опоры на арабов))
А Б В Г  Д Е Ё Ж  З И Й К  Л М Н О

Если надо такие числа в тексте выделять, то использовать букву П (префикс) в начале и пробел конце. Учитывая, что в русском наиболее часто встречающаяся согласная в начале слова и есть П - то может быть так оно и было с самого начала.

Ну вот. При помощи программы-ассемблера (сначала импортноязычной), написать код, который будет считывать файл-дамп и выдавать на выход двоичный код, соответствующий этому дампу.
Затем этот написанный код распечатать в виде дампа (чтобы подавать его на вход самому себе).
Получится утилита с исходником, который можно вбить аппаратно (переключателями).

Дальше, используя эту утилиту, можно сделать исходник утилиты/программы, парсящей машкод (на том - ассемблер, на ассемблере С и т.д.)

Зачем вообще нужен исходник в символах? Потому что биты надо как-то записывать. А буквами на бумаге - компактнее, чем узелками на нитках (как у кипукамайоков).

Написать такую утилиту для ввода дампа - это практически уровень задачи на собеседовании. (Собственно MihalNik так и предлагал). Сложно придумать, куда упрощать написание компилятора дальше

(или всё-таки попробовать узелки?

"узелки на память", говорим: "связать мысль", "связывать слово со словом", "говорить путанно", "спутать смысл", "клубок песен", "нить повествования", "узел проблем", "хитросплетение сюжета", "завязка" и "развязка" о начале и конце художественного произведения, "неувязка" – о бессмыслице в тексте. Сохранилась пословица: "Что знала, то сказала, на нитку нанизала". Клубок в сказке об Иване-царевиче и бабе Яге как аналог клубка Ариадны

Пишут же пособия по действиям на случай Рагнарека/Армагеддона и тому подобных битв бобра с ослом). Узелки не будут русскоязычными, только это и останавливает.

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

Отредактировано Лис (2018-11-05 05:10:44)

0

2

Это остаётся русскоязычным программированием, так как для цифр больше 10 используются русские буквы.

Да, конечно :). В каком таком месте? Откройте алфавит болгарского языка и докажите, что Вы русский.

может, как в старину, заменить все цифры на первые 16 букв алфавита? Так же будет исконнее и самобытнее (без опоры на арабов)

Давайте сразу рунами писать, чего мелочиться-то?

0

3

Можно сделать комбинированный формат, который является и дампом и программой в синтаксисе ассемблера.
Для этого надо добавить метки как номера строк и комментарии с контрольной суммой:

       82←216
А0000: А2 34 56 7Б  Б2 34 56 7В  В2 34 56 7Г # 4125
А0010: Б2 34 56 7В  В2 34 56 7Г  А2 34 56 7Б # 1254
А0020: В2 34 56 7Г  А2 34 56 7Б  Б2 34 56 7В # 5412

Проблемы:
1) метки вклиниваются внутрь инструкции (это ещё не страшно);
2) метки сбивают форматирование отступами (вот с этим неясно что делать,
   точнее понятно как сделать, непонятно как объяснить, что так будет правильно).

Или так:

: = 82←216
.0000 : А2 34 56 7Б  Б2 34 56 7В  В2 34 56 7Г # 4125
.0010 : Б2 34 56 7В  В2 34 56 7Г  А2 34 56 7Б # 1254
.0020 : В2 34 56 7Г  А2 34 56 7Б  Б2 34 56 7В # 5412

Здесь
: - это макроподстановка для имени "команды преобразования"
. - это признак метки (сравните с "точка остановки" в отладчике)
  раз есть признак метки, то не обязательно идентификатору начинаться с буквы
  останется только определить, как отличать регистры от чисел (мнемоники отличаются местом в строке),
  ну в ассемблере GAS ставят процент перед регистрами, и ничего, живут как-то.

числа с плавающей точкой для написания компилятора не нужны (поэтому нет проблемы с использованием точки или запятой в середине числа).
параметры "команды преобразования" можно разделять пробелами (не обязательно запятыми-с-пробелами).

Можно вместо '.' использовать '&' (потому что адрес), или '@' (тоже в адресах используется, почтовых),
а символ точки использовать для чего-то другого.

@метка - объявление метки
&метка - использование метки
. - текущий адрес (RPC/EPC/PC - program counter)

Объявление метки можно пропустить, если считать, что метки всегда начинаются с начала строки (а инструкции и данные - никогда).

: = 82←216
0000 : А2 34 56 7Б  Б2 34 56 7В  В2 34 56 7Г # 4125
0010 : Б2 34 56 7В  В2 34 56 7Г  А2 34 56 7Б # 1254
0020 : В2 34 56 7Г  А2 34 56 7Б  Б2 34 56 7В # 5412

Формат по-умолчанию можно предполагать, или передавать параметрами командной строки,
поэтому в тексте первую строку пропускать:

0000 : А2 34 56 7Б  Б2 34 56 7В  В2 34 56 7Г # 4125
0010 : Б2 34 56 7В  В2 34 56 7Г  А2 34 56 7Б # 1254
0020 : В2 34 56 7Г  А2 34 56 7Б  Б2 34 56 7В # 5412

# - в синтаксисе ассемблера (пусть будет) комментарий, а в синтаксисе дампа - хеш (чтобы отличить его от данных, команд, меток и прочего).

Для чего это всё?
Ну, можно попробовать переиспользовать код загрузчика дампа в коде ассемблера (подумать как).

Отредактировано Лис (2024-10-05 05:37:08)

0