БудДен, на данном этапе мне ваши советы не нужны.
Если вы считаете меня недотепой покажите класс, как нужно.
Бегают и раздают всем советы у тех у кого не получилось.
Я в 1-2 шагах от раскрутки, вы думаете я остановлюсь?
ИванАс пишет язык, похожий на Си или Паскаль
Сообщений 31 страница 40 из 40
Поделиться312024-10-12 19:49:25
Поделиться322024-10-13 20:52:12
Пишем ассемблер на RCX.
input.rax:
.ш(10 23 45 67 89 АБ ВГ ДЕ) ; 5555 comment .ш(01 00 00 00 00 23 45 67) .ш(02 АБ ВГ 00 00 23 45 67) .ш(03 АБ ВГ ДЕ 10 00 00 00 44) .ш(04 00 00 00 00 23 45 00 77) .ш(05 00 00 00 00 23 45 00) .ш(06 00 00 00 00 00) ; comment
rex:
./rex bin.bin 00000000: 10 23 45 67 89 АБ ВГ ДЕ 01 00 00 00 00 23 45 67 |.#Eg.........#Eg| 00000010: 02 АБ ВГ 00 00 23 45 67 03 АБ ВГ ДЕ 10 00 00 00 |.....#Eg........| 00000020: 44 04 00 00 00 00 23 45 00 77 05 00 00 00 00 23 |D.....#E.w.....#| 00000030: 45 00 06 00 00 00 00 00 |E.......| 00000038:
Поделиться332024-10-19 17:07:22
Добавляем несколько байтиков, как в примере выше, добавляем пряностей, меток и соли по вкусу.
И получаем самокомпилирующийся ассемблер:
https://disk.yandex.ru/d/Ync_OnUV03EOyA
Готово!
Поделиться342024-10-30 03:41:27
Если ассемблер транслятор вообще, в принципе, обрабатывает метки, это значит, что ему нужна динамическая память. Потому что входной поток неизвестной длины, метки неизвестной длины, и сколько их там штук тоже заранее неизвестно.
Авторы 150 шагов обошли эту проблему таким образом:
Первая стадия умеет только односимвольные метки (а их не больше, чем символов в алфавите, умноженное на константу),
Вторая стадия написана с этим ограниченным количеством меток.
В принципе, подход можно расширить. Сделать метки фиксированного вида (например не длиннее "Н" символов),
сделать функцию отображения метки на адрес, и тогда меток будет фиксированное количество, причём не ограниченное размером алфавита.
Тут убирается зависимость от неограниченности длины метки (если метка длиннее, это просто специфицированная ошибка),
и максимальное количество разных меток тоже можно рассчитать и выделить память заранее (потому что метки в коде повторно не объявляются).
Можно ещё хештаблицу воткнуть, тогда будут доступны метки любой длины, но тогда станут возможны (маловероятные) баги.
Но стартовый загрузчик должен быть максимально простым, потому что проверять байты руками муторно и противно. А уж лапками...
До какого момента загрузчик должен быть максимально простым?
До тех пор, пока не сассемблирует исходный код своих инструкций в виде мнемоник.
Дальше можно будет писать на мнемониках, и будет полегче,
можно будет написать управление памятью, работу со сбалансированными деревьями, хештаблицами и всё такое.
Я опасаюсь, что ИванАс не сможет написать такой ассемблер, потому что он пишет язык программирования, похожий на Си.
Поэтому область его интересов сместилась в сторону llvm и не сможет вернуться обратно.
Компилятор Си у него получится, но его бинарный размер будет велик, и руками непроверяем,
даже несмотря на то, что он будет написан на кириллице и сможет сам себя компилировать.
Отредактировано Лис (2024-10-30 04:10:16)
Поделиться352024-10-30 14:03:30
Да конечно, самораскручивающийся ассемблер сейчас уже не нужен. Корабль строится на судоверфи, а не на самом этом же корабле. Если бы мы были, как Ной, на планете, где нет вообще никакой суши, то мы были бы вынуждены как-то сами выкручиваться, правда, не имея заранее построенного ковчега, мы бы утонули. Дом строится с помощью сторонних строительных лесов. Яйцо вызревает внутри курицы, и тому подобное. Кроме того, достаточно сложная программа непостижима, или постигнуть её является совершенно нетривиальной задачей. Поэтому идея писать всё на русском с нуля, которая лежит в основе Лисоплана, бессмысленна. Вначале будет казаться, что всё хорошо и постижимо, но довольно быстро (примерно там, где заканчиваются возможности одиночек) станет ясно, что уже никто не контролирует весь код, что нужны очень сложные и не очень надёжные инструменты и процедуры, чтобы хоть как-то сохранять видимость контроля, и что всё равно гарантий нет. Как вот в случае с пейджерами, или с Линуксом. Это нельзя исправить, к этому надо просто привыкнуть.
И при том Оберон является наилучшим приближением, т.к. сохранение простоты в нём декларировано хотя бы как цель. В Линукс-мире этого и подавно нет. Поэтому я действовал максимально правильно, исходя из задачи сохранения контроля, а Лис вообще проигнорировал этот аспект (он, правда и не действовал, но план-то построил).
Ни Лис, ни Иван Ас, похоже, этого не понимают и поэтому строят бессмысленные планы и более того, некоторые даже их реализуют. Хотя проблески понимания начались, но сколько лет-то было потрачено впустую? И сколько лет ещё пройдёт до того, как Лис поймёт, что он ошибся и исправит свой план? Не знаю, кто из присутствующих до этого доживёт. Обычно в науке теории заканчиваются только вместе с их носителями.
Отредактировано БудДен (2024-10-30 14:10:07)
Поделиться362024-10-30 14:07:28
Но если ИванАс просто занимается спортом и доказывает себе и остальным, что он может поднять некую ИТ-штангу, то конечно, в пролёте только Лис, я и Россия, а ИванАс на коне.
Поделиться372024-10-30 18:17:01
Вбоквел там - Почему БудДен ошибается
Поделиться382024-10-30 19:25:23
Пишу общий ассемблер, схема такая:
RCX -> общий ассемблер -> конкретный ассемблер -> бинарник
либо выбрасываем конкретный ассемблер и генерим бинарник:
RCX -> общий ассемблер -> бинарник под конкретный процессор
Байт-код пока не нужен.
Прокладываю цепочку для x86, затем подключаю другую архитектуру(с 3 операндами, выбрать нужно).
Поделиться392024-10-30 19:46:48
RCX -> общий ассемблер -> конкретный ассемблер -> бинарник под конкретный процессор
RCX -> общий ассемблер -> бинарник под конкретный процессор
конкретный ассемблер нужен был Лису, как основа для учебных материалов.
Чтобы миллионы широкие массы энтузиастов написали каждый по своему "общему ассемблеру".
Если конкретный процессор не описывать, то можно ещё сократить:
RCX -> бинарник под конкретный процессор
Всё равно в кишки сложного компилятора никто не полезет (вы gcc изучали в деталях? ну вот. А там можно прикрутить свой ассемблерный код, кириллический, и его "обобщённость" будет только мешать, излишне усложнять. А желание интегрироваться с GCC может возникнуть, если захочется свою модель процессора эмулировать, типа mmix).
Отредактировано Лис (2024-10-30 19:59:07)
Поделиться402024-11-27 23:45:09
Как идут дела?