Важная информация
Показано с 1 по 7 из 7

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

  1. #1 Компилятор 
    Супер модератор Аватар для Kakos_nonos
    Регистрация
    07.01.2011
    Адрес
    Кубань
    Сообщений
    1,531
    Сказал(а) спасибо
    126
    Поблагодарили 428 раз(а) в 291 сообщениях
    Записей в блоге
    6
    Вот, готовый компиятор степлера. Версия немного сыровата, в основном недороботки в плане интерфейса, а со своей задачей - компилировать он справляется.

    Что он компилирует:
    Команду присваивания
    Команду условного и безусловного перехода
    Команду условного и безусловного вызова подпрограмм
    Вывод строки

    Что он не компилирует
    Оператор "
    Команды ~

    Также есть возможность выбора типа компиляции: c использованием DOS прерываний и без.

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

  2. #2  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    В идеале, конечно, генерировать ассемблерный код, совместимый с каким либо определенным ассемблером (а при должном уровне гибкости можно добиться совместимости с несколькими).
    Также, при запуске программы sort.com у меня был запрошен ввод всех чисел. Все ввел корректно, и программа пошла выполняться, очень быстро вывела отсортированный массив.
    1. Логичным было бы вставить в программу перед ее завершением следующий код: xor ax,ax int 16h. Он сделает паузу до нажатия любого символа, иначе после завершения программы она быстро закрывается, и если мы не в DOS, то результат нам не виден (конечно, если запускать программу из командной строки даже в Windows, то результат увидим, но все же)
    2. После выполнения программы sort.com был выведен массив. После чего программа начала выводить на экран всякую чепуху - а динамик, скорее всего от вывода символа bel постоянно пищал. при попытке снять программу все вообще подвисло - еле закрыл, ито через полминуты такого пищания. Ну случай, так и случай, ладно. С кем не бывает. Странно то, что второй раз при запуске этой программы все обошлось нормально. При третьем запуске (за правильностью ввода всегда внимательно следил, чтобы все было хорошо) программа выполнилась нормально, но после печати последнего символа курсор находился не там, где должен был быть (после последнего символа) а вообще намного ниже нужной позиции. При этом программа зависла вместе с командной строкой, откуда ее запускал. При четвертном запуске процессор NTVDM вообще отказался ее выполнять - мол такая та ошибка.
    Странно. Вы хорошо тестировали компилированные программы у себя? Все работало? У меня, как видите, проблемки наблюдаются, и связаны они, скорее всего, вовсе не с NTVDM. Потому что при запуске sort.com в DosBox - досбокс тоже завис после выполнения программы. То ли где то ошибка при компиляции, толи просто используется неверный выход из программы (вообще, программы com должны завершаться командой ret или int 20, а не системным вызовом 4с int 21h - он, как правило, применяется для мультисегментных программ exe)

    Вообще, в идеале, компилятор неплохо бы объединить с препроцессором (это позже) а для начала с интерпретатором. Плюсы будут заключаться в том, что компилятору достанется уже проверенный интерпретатором код программы, с которой не будет проблем при компиляции. У меня вообще огонь выходит - компилировать из байт-кода в ассемблер будет чистым и светлым удовольствием, и я этим займусь сразу же после того, как закончу работу над новым интерпретатором, который будет поддерживать последние расширения языка) =).
    Дружба-магия-радость!
    Ответить с цитированием  
     

  3. #3  
    Супер модератор Аватар для Kakos_nonos
    Регистрация
    07.01.2011
    Адрес
    Кубань
    Сообщений
    1,531
    Сказал(а) спасибо
    126
    Поблагодарили 428 раз(а) в 291 сообщениях
    Записей в блоге
    6
    Да, программа иногда проглючивает, с этим буду справлятся. После выполнения тоже иногда глючил.
    Буду исправлять.
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

  4. #4  
    Супер модератор Аватар для Kakos_nonos
    Регистрация
    07.01.2011
    Адрес
    Кубань
    Сообщений
    1,531
    Сказал(а) спасибо
    126
    Поблагодарили 428 раз(а) в 291 сообщениях
    Записей в блоге
    6
    Улучшил компилятор. Теперь он генерирует сом-фаил и запускает его.
    Проблемы с выводом числа вроде решил, но выход из программы всё равно иногда глючит.
    Вложения
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

  5. Пользователь сказал cпасибо:

    Абадябер (25.09.2011)

  6. #5  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Большое спасибо, изучу как будет время - возможно и ошибочку отыщем =).
    DASM - это ваша разработка? Если так, просмотрите, возможно он неверно ассемблирует некоторые ассемблерные команды. В противном случае нужно разбираться более углубленно, а на мне еще сайт и свой LInt висит =(
    Дружба-магия-радость!
    Ответить с цитированием  
     

  7. #6  
    Супер модератор Аватар для Kakos_nonos
    Регистрация
    07.01.2011
    Адрес
    Кубань
    Сообщений
    1,531
    Сказал(а) спасибо
    126
    Поблагодарили 428 раз(а) в 291 сообщениях
    Записей в блоге
    6
    Нет, dasm не моя разработка. Ошибка скорее всего гдето в стеке, так как он один общий на несколько стеков.
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

  8. #7  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Просмотрел компилятор. Так скорее всего и есть. Я бы не стал реализовать стек прямо на системном (PUSH, POP), ибо это ни к чему хорошему не приведет, и любая программа на СТЕПЛЕРе, в которое есть ошибка работы со стеком ОПЗ, гарантированно приведет к обрушению программы.
    Для стека ОПЗ вам достаточно получить немного памяти, например вот так ES:[DI], где DI будет указывать на ячейку стека. Для программы COM это можно сделать простейшим образом вот так (если ничего не напутал):
    Код asm:
    ;Начало сгенерированного компилятором ассемблерного кода
    mov di,offset stack  ;3 строки создают стек
    mov ax,cs
    mov es,ax ;теперь по es:[di] будет находится память, относящаяся к стеку ОПЗ - все, что за меткой stack.
    ;Например, операция увеличения индекса стека (^) будет выглядеть как add di,2; mov word ptr es:[di],0
    ...
    stack:
    ;конец сгенерированного компилятором ассемблерного кода
    Последний раз редактировалось Абадябер; 25.09.2011 в 18:56.
    Дружба-магия-радость!
    Ответить с цитированием  
     

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

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

Похожие темы

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