Важная информация
Страница 1 из 4 123 ... ПоследняяПоследняя
Показано с 1 по 10 из 34

Тема: Компилятор

  1. #1  
    Профи
    Регистрация
    08.11.2010
    Сообщений
    106
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    Есть огромное желание создать НОРМАЛЬНЫЙ компилятор языка Бейсик в бинарный код. В НОРМАЛЬНЫЙ код. Не занимающий минимум 16 килобайт!!!! Это для print"Hello World". Хотя бы для реального режима DOS.

    Я как-то встречал компилятор Ассемблера написаный на самом Бейсике, но не для х86 процессора. Реализован просто. Весит мало. Мне понравился принцип перевода директив в коды. если кому интересно - хотел бы сделать наконец нормальный компилятор делающий компактные и лёгкие исполняемые файлы.
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

  2. #2  
    Гуру Аватар для Konstantin Shcherba
    Регистрация
    08.11.2010
    Сообщений
    1,336
    Сказал(а) спасибо
    26
    Поблагодарили 139 раз(а) в 107 сообщениях
    Записей в блоге
    1
    Почему 16 килобайт? У меня PRINT "Hello" на QB 4.5 заняла 3202 байта. Конечно это не ассемблеровские 14 байт, но все же не так плохо.

    Если есть желание написать компилятор, лучше всего начать с написания компилятора ассемблера. Вот хорошая таблица оптокодов x86 - [Ссылки могут видеть только зарегистрированные пользователи. ] Рекомендую почитать книжки Зубкова и Юрова.

    По написанию компилятора языка высокого уровня есть хороший сайт [Ссылки могут видеть только зарегистрированные пользователи. ].

    На сайте [Ссылки могут видеть только зарегистрированные пользователи. ] много исходников разных компиляторов в том числе и Basicа.
    Ответить с цитированием  
     

  3. #3  
    Гуру Аватар для Konstantin Shcherba
    Регистрация
    08.11.2010
    Сообщений
    1,336
    Сказал(а) спасибо
    26
    Поблагодарили 139 раз(а) в 107 сообщениях
    Записей в блоге
    1
    Бейсик есть даже для AVR и PIC микроконтроллеров. Где то видел даже комп на ATmega, сам контроллер и микросхема памяти, подключается обычная ps/2 клавиатура и телевизор. Можно писать простейшие программки. :)
    Ответить с цитированием  
     

  4. #4  
    Профи
    Регистрация
    08.11.2010
    Сообщений
    106
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    Цитата Сообщение от qbasic
    Почему 16 килобайт? У меня PRINT "Hello" на QB 4.5 заняла 3202 байта. Конечно это не ассемблеровские 14 байт, но все же не так плохо.

    Это когда делаешь програмку которой нужна библиотека входящая в QB. Щас посмотреть точно не могу - но при компиляции есть 2 варианта EXE. Один из них и правда маленький - но если рядом нет XXXX.ovl - не запустится. А тот который standalone - уже весит!

    Да и фрипаскальный выдаёт в в экзешнике всю GCC :) и написанное на нём работает ещё медленнее.
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

  5. #5  
    Гуру Аватар для Konstantin Shcherba
    Регистрация
    08.11.2010
    Сообщений
    1,336
    Сказал(а) спасибо
    26
    Поблагодарили 139 раз(а) в 107 сообщениях
    Записей в блоге
    1
    Да, согласен, без библиотеки не запускается. Фрибейсик меня как-то не впечатлил, хотелось бы более легкого решения в виде одного-двух файликов.

    Немного помечтаю
    Оптимально было бы 3 файлика - редактор, компилятор и файл справки. Все на чистом асме. Думаю компилятор под ДОС легко влезет в COM файл.
    Ответить с цитированием  
     

  6. #6  
    Профи
    Регистрация
    08.11.2010
    Сообщений
    106
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    В принципе меня бы устроил код использующий для работы преравания ДОС. Конечно програмка на голых командах процессора работала бы быстрее... Хотя это не факт :)

    В принципе в биосе и в досе уже заложено всё, что требуется в бейсике. Работа с портами и файлами, дисплей, принтер. Конечно если я буду делать динамичную игру со сложной графикой - то прерываниями рисовать линии и заливку делать - это долго. Но например ту же команду screen можно реализовать именно прерыванием.

    А вот всякого рода арифметику - тут надо пособирать по сусекам инета готовые алгоритмы вычислений и самые быстрые из них и применять.

    Супер конечно если бы компилятор написать на бейсике :) И что бы он сам себя мог компилить :)
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

  7. #7  
    Гуру Аватар для Konstantin Shcherba
    Регистрация
    08.11.2010
    Сообщений
    1,336
    Сказал(а) спасибо
    26
    Поблагодарили 139 раз(а) в 107 сообщениях
    Записей в блоге
    1
    Код :
    mov ah,9
    mov dx,offset message
    int 21h
    ret
    message db "Hello$"
    Вот например программа на асме использует основной сервис ДОС - 21- ое прерывание и написана на голых командах процессора. :) Или под "голыми" понималось написание непосредственно в машинном коде, ассемблируя в уме :).

    Функции ДОСа по работе с графикой действительно очень медленные, проще писать напрямую в видео память. Особенно удобен режим 320x200x256 - один байт - один символ.

    Компилятор можно написать и на бейсике, но на асме будет меньше и быстрее. Начать думаю все-таки стоит с компилятора ассемблера - он проще.

    P.S. У Хохлова на сайте (ссылку давал выше) есть маленький паскаль собирающий сам себя.
    Ответить с цитированием  
     

  8. #8  
    Гуру Аватар для Konstantin Shcherba
    Регистрация
    08.11.2010
    Сообщений
    1,336
    Сказал(а) спасибо
    26
    Поблагодарили 139 раз(а) в 107 сообщениях
    Записей в блоге
    1
    Вот кстати нашел на [Ссылки могут видеть только зарегистрированные пользователи. ]

    Вы когда-нибудь видели компилятор, написанный на GW-Basic'е? Нет? Воображение не включается? Ну так посмотрите - это же ночной кошмар сишного программера!.. Входной язык компилятора почти полностью совместим с GW-Basic'ом. Что интересно, компилятор компилирует сам себя. В архиве также исходники небольшой IDE (тоже на Бэйсике).
    Ответить с цитированием  
     

  9. #9  
    Профи
    Регистрация
    08.11.2010
    Сообщений
    106
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    Цитата Сообщение от qbasic
    Код :
    mov ah,9
    mov dx,offset message
    int 21h
    ret
    message db "Hello$"
    Вот например программа на асме использует основной сервис ДОС - 21- ое прерывание и написана на голых командах процессора. :) Или под "голыми" понималось написание непосредственно в машинном коде, ассемблируя в уме :).
    Мне бы хотелось получать не ассемблерный листинг а сразу СОМ файл. И в идеале я хочу иметь не три файла а два :) Собственно оболочку как в QB и сам компилятор.

    По поводу обращения напрямую в память вы правы.

    Я думаю можно выделить несколько моментов. Нужно определиться с языком на котором писать. Бейсиков много. Они похожи, но в каждом есть отличия. Что бы не забивать голову ВСЕМИ бейсиками и делать нечто среднее и своё, надо выбрать один из Бейсиков. Мне очень нравятся версии которые стояли на разного рода УКНЦ или Tandy200. И конечно без излишеств типа программирования под WIN32.

    обработку собственно ключевых слов реализовать можно в виде подпрограмм. Например компилятор видит PRINT и вызывает подпрограмму формирующую команды вывод на экран. Которые в машинном коде сразу пишутца в сом файл.

    Правда разного рода ветвления, переменные, и вообще организация самого сщь файла совсем не похожи на бейсик :) Я даж не представляю как компилятор преобразует значения переменных в значения ячеек в памяти с некими адресами...
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

  10. #10  
    Гуру Аватар для Konstantin Shcherba
    Регистрация
    08.11.2010
    Сообщений
    1,336
    Сказал(а) спасибо
    26
    Поблагодарили 139 раз(а) в 107 сообщениях
    Записей в блоге
    1
    Под третьим файлом я подрузомевал справочную систему, что бы при желании можно было бы выкинуть редактор и справку и оставить только компилятор.

    Я не спец в построении компиляторов, но думаю процесс должен происходить примерно так:
    1. В качестве выходного формата для простоты использовать ДОСовский COM файл - это FFFFh байт под PSP, код, стек и данные.
    2. Для переменных и массивов использовать область памяти за концом программы.
    3. В качестве основы для диалекта выбрать QBASIC. С диалектами УКНЦ или Tandy200 к сожалению не знаком.
    4. Начать разработку с построения компилятора ассемблера, так как работать с машинным кодом придется довольно плотно. Использовать его в дальнейшем для трансляции ассемблерных вставок в BASIC программах.
    5. Вести разработку с нуля в целях самообразования :)

    С ветвлениями проблем особых нет - IF это аналог cmp в ассемблере. Основная сложность работы с переменными это их непредсказуемый размер, т.е. нельзя зарезервировать под строковую переменную определенное ко-во байт и забыть об этом.
    Я пока вижу единственный выход - вытаскивать изменяемую переменную в конец используемой для них памяти, а остальные сдвигать на ее место, что бы не было "дырок".
    Ответить с цитированием  
     

Страница 1 из 4 123 ... ПоследняяПоследняя
Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Компилятор BrainFuck на СТЕПЛЕР-е
    от Абадябер в разделе Проекты на Степлере
    Ответов: 4
    Последнее сообщение: 24.01.2012, 03:10
  2. Компилятор A2 от Сергея Костыгова
    от Konstantin Shcherba в разделе Assembler
    Ответов: 0
    Последнее сообщение: 13.11.2011, 10:16
  3. Компилятор ассемблера от Евгения Михальчика
    от Konstantin Shcherba в разделе Assembler
    Ответов: 0
    Последнее сообщение: 13.11.2011, 10:09
  4. Компилятор
    от Kakos_nonos в разделе Степлер
    Ответов: 6
    Последнее сообщение: 25.09.2011, 18:00
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •