ПО, ЭВМ и АСУ из Таможенного Союза

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

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



Как сделать нормальный ассемблер

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

1

То есть не пытаться взять опенсорс разработку компилятора Си. Затем перевести на русский и сделать сборку специально для Астра-Линукс. Это все ересь.
А сделать нормальный человеческий ассемблер.
Итак, составляем рецепт.
1. Навести порядок в философии. Или идеологии. Это смежные термины (отличие в направленности на социальные группы), но в нашем случае мы различия делать не будем. Будем считать это взглядом на мир с точки зрения достижения заявленной цели.
1.1. Выкинуть весь бред про патриотизм. Просто потому что 90% это не патриотизм, а консерватизм. Но признаваться в этом стыдно, потому что это прямым текстом заявление о том, что нужно ходить в лаптях и говорить через твердый знак. А так можно прикрыться типа заботой о Родине (нанося ей ущерб идиотскими инициативами, типа купить каждой бухгалтерше по Эльбрусу, когда в госконторах денег на бумагу уже нет и вовсю печатают на черновиках), да еще оппонентов удобно предателем Родины заклеймить. Итак, выкинуть это нафиг. А чем заменить? И тут ответ прост - не заменять ни чем. Ни демократией, ни открытым миром не патриотизмом, не русофобством, ни консерватизмом. Ничем. Вот русский ассемблер не рассматривается в этом контексте.
1.2. Выкинуть тараканы про русскость из всех инструментов. Вот 1Скрипт православный, а другие нет. Просто потому что так нравится Лису. Это очередная ересь, которая наносит ущерб общему делу. Поэтому выкинуть. Также и все что связано с этой дрянью. Ну типа Буржуйская винда плохо, а Астра Линукс в основе которого буржуйский Дебиан - это все от лукавого.
2. Перестать страдать фигней и придерживаться одной цели. Ну как там по-пацански - пацан сказал, пацан сделал. Это значит, что если Вы делаете ассемблер, то Вы не переводите буржуйский Си, называя это русским ассемблером. Это ересь.
3. Составить информационную модель.
Вкратце так:
3.1. Получаем на вход данные (файл)
3.2. Читаем го
3.3. Парсим
3.4. Строим внутренне представление
3.5. В зависимости от целевой платформы строим выходной файл в опкодах
4. Внутренняя структура. Это достойно обсуждения. Но предлагаю следующие костыли:
4.1. Синтаксис во внешнем файле. Мне нравится эта идея. Это удобно. Это позволяет проектировать синтаксис независимо от семантики.
4.2. Общий принцип модели также определяется внешним файлом - это позволяет получать код под разные платформы:
4.2.1. Заголовок файла  - опкоды в текстовом виде (строки в которых записаны шестнадцатеричные числа)
4.2.2. Команды - также наборы опкодов с параметрами. По сути это встраиваемые подпрограммы, а не бинарное представление мнемоники
4.2.3. Хвост - аналогично заголовку, служебные данные если они необходимы.
Такая структура позволяет писать ассемблер под любой процессор/платформу/микроконтроллер.

Вот пока вкратце так. Если интересно, то идем дальше, уточняем от общего к частному. Строим диаграммки и схемы.

0

2

увидев реальный прогресс по ранее опубликованному стратегическому плану (прогресс выражается в факте запуска ЛуаРус на Астра-линуксе), Уткин впал в панику и занялся саботажем дальнейшего продвижения по плану.

Страшно подумать, что начнётся, когда я буду публиковать примеры кода на 1Скрипт для Альт-линукса

Отредактировано Лис (2018-10-16 19:51:37)

0

3

Да как одно мешает другому-то? Делайте Луа. Просто не называйте это ассемблером и всё.

0

4

Уткин, Ваш троллинг не поможет сбить других читателей со стратегического лисопути. Ведь Лис всегда готов разьяснить, что его первой целью является написание парсера машкода. ЛуаРус тут это просто стартовый инструмент. Не заработал ЛуаРус, значит будет взят 1Скрипт.

У меня была договорённость (соглашение) с rst256 о совместной разработке на РусЛуа. Это причина попытки на него перейти. К сожалению, перейти пока не удалось.

Отредактировано Лис (2018-10-16 20:01:24)

0

5

Вот я об этом и пишу - мы будем скакать туда сюда, вместо того чтобы заняться разработкой программы.

0

6

MihalNik выбирает  Алфор  в течение такого же количества времени, сколько я выбираю 1Скрипт.

Я вот тоже хотел ещё и Алфор попробовать, но теперь после суровой критики Уткина сомневаюсь...
Тем более, что с MihalNik-ом никаких договорённостей достигнуто не было.

Отредактировано Лис (2018-10-16 20:19:26)

0

7

utkin
1. Определить способ манетизации
1.1 Определить целевую аудиторию. Кто конечный потребитель?
2. Нужно разделение труда.
3. Каму ваша модель нужна?
Открываем любую книгу по компиляторам срисовываем.
Лучше определиться с поддержкой макросов и их видом.

utkin написал(а):

Общий принцип модели

Это ещё что такое?

utkin написал(а):

Заголовок файла  - опкоды в текстовом виде (строки в которых записаны шестнадцатеричные числа)

Заголовок это шаблон, а не опкоды.  Вы видимо имели в виду DOS заглушку в EXE-PE.
Для описания формата файла есть куча стандартов. Только я не вижу смысла в их поддержке.  Нам же не парсить, а генерировать надо.
А общих данных в разных файлах почти нету. PE и ELF очень сильно отличаются.

utkin написал(а):

4.2.3. Хвост - аналогично заголовку, служебные данные если они необходимы.

Хвост понятие растяжимое. 
1.  У кого-то это неицированные данные. Секция BSS
2.  У кого-то таблица импорта или экспорта.
3   У третьего в хвосте лежит отладочная информация.
4.  У четвёртого тело архива или ещё чего нибудь.

Основная проблема для создания компилятора это слабая документация на секции импорта и экспорта, таблицы символов.

1. Количество мнемоник, их тысячи.
2. Способ кодирования. По сути там нет закономерностей.  Фактически идёт одна главная таблица которая распадается на поколения развития процессора (286, 386, MMX, SSE, SSE2, SSE4, AVX,..)которые потом делятся на группы.  Для примера 286: строки, сдвиги, вызовы, флаги, стек,... Которая кодируется каждая по своему. Просто иначе там ещё несколько таблиц.

А если брать ARM где сдвиги комбинируются с большинством арефметических и других команд. Они входят в опкоды. То понятно что ничего общего в таблицах не будет.

Лично я не стал возиться с таблицами, так как их отлаживать трудно в виду отсутствия наглядности.  Есть несколько готовых движков с уже набранными таблицами. Если самому это набирать, то уйдёт уйма времени у меня свой эмулятор х86 с ассемблером и дизассемблером, так что я знаю.

0

8

1. Определить способ манетизации

Это отдельный разговор. Цель же написать инструмент.

Определить целевую аудиторию. Кто конечный потребитель?

Лис на Эльбрусе под Астра Линуксе. Шучу конечно.

2. Нужно разделение труда.

Конечно. Как и в любом проекте.

3. Каму ваша модель нужна?
Открываем любую книгу по компиляторам срисовываем.

Там срисовывать нечего. Ассемблер же.

Лучше определиться с поддержкой макросов и их видом.

п. 4.2.2 частично решает эту проблему.

Это ещё что такое?

Это я не удачно выразился. Каюсь.

Заголовок это шаблон, а не опкоды.  Вы видимо имели в виду DOS заглушку в EXE-PE.

Я имел ввиду нечто более общее. В отрыве от конкретной платформы.

PE и ELF очень сильно отличаются.

Поэтому эти данные должны храниться во внешнем файле. Также как и синтаксис.

1. Количество мнемоник, их тысячи.

Но оно конечно. А значит не является проблемой.

Если самому это набирать, то уйдёт уйма времени у меня свой эмулятор х86 с ассемблером и дизассемблером, так что я знаю.

Есть же справочники. У Интела на 64 бит всего 4800 страниц текста и табличек.

0

9

MihalNik выбирает  Алфор  в течение такого же количества времени, сколько я выбираю 1Скрипт.

Во-первых он помнил про эту разработку много лет.
Во-вторых, не выбирает, а изучает и посматривает за её ходом.

Лис написал(а):

Ведь Лис всегда готов разьяснить, что его первой целью является написание парсера машкода.

Это вообще reengineering.

0

10

Мне вот любопытно... За все время обсуждения какие-то конкретные мысли по синтаксису ассемблера родились? А то я сейчас маленький дизассемблер делаю для отладки ВМ, так может есть какие наработки...

0

11

Павиа сообщал о том, что он завершил написание русскоязычного дизассемблера для архитектуры Интел.
Но он не отвечает на мои письма.

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

Отредактировано Лис (2023-04-12 04:41:00)

0

12

Ссылка в тему (даже две):

http://compiler.su/o-russkom-assemblere.php
https://ruscomp.bb24.ru/viewtopic.php?id=42

В советское время тоже были проекты «универсального ассемблера»: языки АЛМО, Сигма, Эпсилон и другие. Возможно, там что-то можно найти что-то интересное.

Что же мы видим?

На территории необъятной уже неоднократно писали как дизассемблеры, так и ассемблеры. Но всем им нехватило грамотного документирования (иначе дизайн-документы были бы доступны) и распространения.

В наше время совершенно несложно оформить публикацию "печатного" материала, и по законодательству .pdf-копии документов будут направлены во все основные государственные библиотеки.

.pdf-документы, конечно, делать надо уметь. Например при помощи TeX (точнее LaTeX).

Отредактировано Лис (2023-04-13 22:40:27)

0