С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
псевдокод в данном случае - это не замена ассемблерных команд один-в-один, а каждая команда псевдокода может содержать несколько ассемблерных команд. Т.е. по сути каждая команда псевдокода описывает элементарное действие (запомнить, сложить, делить и т.д.), которое может состоять из нескольких ассемблерных команд.
Вот например, нужно компильнуть: a:=4+(2+3).
При просмотре исходника преобразуем в команды:
Каждая команда содержит мнемонику, а также один числовой и один строковый параметры (прочерк '-' означает отсутствие значения).Код:_LoadConst 4 - _Push - - _LoadConst 2 - _Push - - _LoadConst 3 - _PopAdd - - _PopAdd - - _StoreByte 0 _A
_LoadConst на коде Асма будет ld hl,const
_Push - push hl. Приходится вталкивать в стек каждое значение, иначе заранее неизвестно, что мы с ним будем делать дальше.
_PopAdd - это в реале две команды pop de и add hl,de.
_StoreByte - это запись hl в один байт, т.е. ld a,l и ld(_A),a
Реальный код:
Теперь, чтобы его оптимизировать, не нужно проводить глубокий анализ всех push-pop и прочего, а только смотрим последовательные комбинации команд и сравниваем с заданными шаблонами оптимизатора. Например, имеется шаблон - последовательность _Push, _LoadConst, _PopAdd заменить на _LoadConst2Add.Код:ld hl,4 push hl ld hl,2 push hl ld hl,3 pop de add hl,de pop de add hl,de ld a,l ld (_A),a
_LoadConst2Add состоит из двух команд: ld de,const и add hl,de
Тогда будет:Код:_LoadConst 4 - _Push - - _LoadConst 2 - _LoadConst2Add 3 - _PopAdd - - _StoreByte 0 _A
Как-то так. Команды и шаблоны я сам придумываю в своем компилеКод:ld hl,4 push hl ld hl,2 ld de,3 add hl,de pop de add hl,de ld a,l ld (_A),a![]()
Последний раз редактировалось Andrew771; 25.02.2015 в 12:55.
Да, всё верно. Но у нас всё-таки разные компиляторы и подход к их написанию. Потом будет интересно сравнить результат.
батл компиляторов?))))))))))))
Снимаем с соревнований. Во-первых потому что это всё-таки не Паскаль, во-вторых потому что там всю работу делают Ofront и SDCC. А развивается ли Z80-кодогенератор SDCC? Определённо да. Недавно обновил до нового снапшота, компактнее код генерит. На удивление стабильно собрал несколько сложных прог. Нужно не лениться репортить ошибки, их таки исправляют и продукт становится лучше.
AlCo предлагает разработать Оберон-компилятор чтобы работал на самом Спеке, я пока отбрыкиваюсь, вроде странная задачка.
Почему нет?
В CP/M есть отличный компилятор ANSI C - Hitech C. Сделайте опять же нативный Z80-транслятор с Оберона на С.
Если не нравится Hitech C (например из-за того что он для CP/M, хотя Алоне все равно для АТМ пишет же), есть несколько компиляторов С в исходниках. Да и на спеке наверное есть С-компилеры (правда, из 90-х помнится что спековские компилеры были слабоваты, возможно из-за отсутствия нормальной ОС)
---------- Post added at 12:32 ---------- Previous post was at 12:21 ----------
Компиляторы компиляторами, а смотрели вы например трансляторы (не интерпретаторы!)? Например, Innerfuse Pascal Script 3? Это скриптовый Object Pascal движок вида "Дельфи внутри Дельфи", на входе скрипт (т.е. программа на паскале), на выходе некий байт-код для executar-а (модуля-исполнителя байткода). Есть "дизассемблер байт-кода". Лет двенадцать назад я был просто фанатом IPS3 (версия 3 - последняя Free OpenSource, остальные платные), писал на нем программы в тысячи строк. Работало быстро и без косяков, все в исходниках, язык - практически полный Object Pascal.
Последний раз редактировалось Error404; 17.03.2015 в 12:35.
Лучше сделать и жалеть, чем не сделать и жалеть.
Некоторые из моих поделок тут: https://github.com/serge-404
Странная идея - пытаться юзать Спек как полноценную хост-платформу для разработки в качестве IDE. А то ведь, как я думаю, этому мешают объективные факторы - низкое разрешение экрана, слабенький проц и мало памяти. Даже если взять во внимание клоны, то и тогда вопрос использования именно Z80-based машины не имеет преимуществ, помимо нерациональной привязанности к системе команд этого проца aka тёплых домашних воспоминаний. Или это для истинныхмазохистовценителей?
Кто-то называет выбранный мною подход трансляции Оберона в Си читерским, но я не верю в разработку кодогенератора приемлемого качества одной персоной на голом энтузиазме за разумный срок. Также не верю и в то, что две персоны согласуют взгляды на разработку до каких-то общих целей. Так что это раз. Два - желание хорошо отделить фронт-энд от бэк-энда. Вроде бы мне это удалось. Переписывать под Z80 - странная идея. Топтаться на месте много лет. Кому-то нравится? Удачи.
Вот ещё кое-что интересное на тему языков и трансляции, я весьма советую:
• Правильные книги по теории и обзору языков программирования
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)