Делаю курсовую по системному ПО. Появились вопросы.

Тема в разделе "WASM.BEGINNERS", создана пользователем _proteus, 25 май 2010.

  1. _proteus

    _proteus Member

    Публикаций:
    0
    Регистрация:
    25 мар 2008
    Сообщения:
    192
    Адрес:
    Казань
    Сразу прошу сильно не пинать. По возможности буду стараться разбираться сам. Но буду признателен, если проясните мне некоторые вопросы, дадите советы и просто поможете.

    Суть курсовой состоит в следующем:
    реализовать однопроходной макроассемблер, содержащий:
    Вложенные макроопределения
    Макровызовы внутри макроса
    Метки внутри макроса
    Параметры вызова макроса: Смешанный
    Условная макрогенерация: (AIF, AGO) + (IF, ELSE, ENDIF) + (WHILE, ENDW)
    Опережающее описание макроса: нет

    Реализовать в составе основного алгоритма ассемблера.

    Пока подковываюсь теоретически. Но уже пора начинать прогать.

    Сразу вопрос: с какой стороны подойти к программе, с чего начать? (Больше всего пугает фраза: "Реализовать в составе основного алгоритма ассемблера.")

    Заранее благодарен.
     
  2. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    248
  3. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    Не надо её пугаться. Кодогенерация (раскрытие макросов) может быть реализована отдельно от компилятора. Скажем всяческие #define/#include в C изначально были реализованы именно самостоятельной программой-препроцессором, которая раскрывала все директивы препроцессора, получала "чистый" C, и отправляла его в пайп, а на другом конце пайпа был компилятор C. Здесь же явно заказан иной подход.
     
  4. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Ничего себе курсовая, по такому заданию работы вагон, это тянет на целый диплом. Интересно, какие ВУЗы настолько суровы, что в качестве курсовой приходится писать компилятор ассемблера (пусть даже однопроходовый) с поддержкой макроинструкций??? Легче язык ЛОГО реализовать, чем макроассемблер.

    Я бы на такое задание предположил на 1 человека месяца 3... при условии, что студент уже знает что делать. Месяц на черновой вариант (глючный, бажный, без ММХ-SSE, и только в com-ушники) , месяц на отладку и доработку... и еще недели 3 на отладку доработанного :))) А если исполнитель еще и не знает КАК (то есть должен теоретически подковываться в процессе) - то и полгода маловато.

    Если сдача через месяц - я бы на вашем месте пугался бы не только фразы про "реализовать".
     
  5. _proteus

    _proteus Member

    Публикаций:
    0
    Регистрация:
    25 мар 2008
    Сообщения:
    192
    Адрес:
    Казань
    По мне -- так двухпроходной по-проще реализовать будет, но в моем варианте -- 1-проходной.

    Не так все страшно.
    Ассемблер настоящий (например, типа МАСМ) реализовать задача не стоит.
    Вот, например, примерная ТКО (табл. кодов операций) "моего" ассемблера:
    ком. код размер команды
    JMP 01 4
    LOADR1 02 4
    LOADR2 03 4
    ADD 04 2
    MIN 05 2
    SAVER1 06 4
    SAVER2 07 4


    Понятно, что нужно сразу макрос "рашифровывать", на ходу. Не совсем понятно, как это делать. Я с трудом это себе представляю (преобразование макросов и тут же переделка получившегося кода в двоичный). А ведь еще макросы могут быть вложены и т.д. :dntknw:
     
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    FatMoon
    Если учесть, что через неделю будет июнь, и, в нашем ВУЗе по-крайней мере, сдача курсовых идет полным ходом, возникает вопрос, а чем занимался ТС последние три месяца?
     
  7. _proteus

    _proteus Member

    Публикаций:
    0
    Регистрация:
    25 мар 2008
    Сообщения:
    192
    Адрес:
    Казань
    Mikl___
    учился и работал.

    У нас пока курсач по СПО еще никто не сдавал. Я иду почти по графику.
     
  8. _proteus

    _proteus Member

    Публикаций:
    0
    Регистрация:
    25 мар 2008
    Сообщения:
    192
    Адрес:
    Казань
    лабы были тоже похожими.

    Это были задания на 1-3 лабы. 4-6 -- тоже самое, но ассемблер 1-проходной.
     
  9. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Вообще говоря, однопроходный ассемблер можно сделать только через задницу, поскольку придётся запоминать места ссылок на ещё не определённые метки и потом, в конце прохода, корректировать объектный код. Например:

    Код (Text):
    1. jmp MyLabel
    2. ....
    3. MyLabel:
    Транслятор не сможет правильно сформировать код команды jmp, поскольку он не знает смещение MyLabel. С макросами в этом плане ещё хуже, поэтому во многих, если не во всех, макроассемблерах требуется, чтобы макрос был определён до его первого использования. Посему требование однопроходности представляется очень странным и, мягко говоря, необоснованным. В конце концов, не зря все классические ассемблеры были двухпроходными (а позднее появились и многопроходные).

    А вот совместить процесс трансляции машинных инструкций и обычных директив ассемблера (вроде DB, DD и т.д.) с работой макропроцессора никаких сложностей не представляет -- если, конечно, макроопределения встречаются до вызовов соответствующих макросов. Грубо говоря, встречая директиву MACRO (каков её точный синтаксис, неважно -- это мелочи), транслятор считывает из исходного файла строку за строкой до тех пор, пока не встретит директиву ENDM, и просто запоминает эти строки (во вспомогательном файле, в динамически выделенной области ОЗУ -- опять-таки не суть важно, это техника). Кроме того, он разбирает оператор прототипа макрокоманды (где объявлено имя макроса и перечислены его формальные параметры). В дальнейшем, обнаружи вызов макроса с таким именем, он устанавливает соответствие фактических параметров формальным и просто вставляет вместо вызова ранее запомненные строки -- естественно, выполняя подстановку значений параметров. В общем, ничего действительно сложного здесь нет.
     
  10. _proteus

    _proteus Member

    Публикаций:
    0
    Регистрация:
    25 мар 2008
    Сообщения:
    192
    Адрес:
    Казань
    В том-то и дело, что предопределения макроса нет :dntknw: Вариант такой гадский достался.
    Некоторым повезло с вариантами курсачей, у них они проще лаб получились. Мне не повезло.
     
  11. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    _proteus
    Советую взять тупо yacc, набабахать туда правил и все. У меня когда-то были подобные лабы (а не курсовые). Ничего сложного. Но SII правильно заметил. Однопроходный ассемблер не сможет разрешить ссылки вперед - по крайней мере классически.
    Но можно решить своим путем. Создается таблица ссылок. Как только мы видим ссылку вперед - в таблице резервируется место, и jmp прямой изменяем на jmp [table+i*4]. где i - номер элемента. В конце концов найдя адрес ссылки, пишем его в таблицу. Таблица пихается в код программы. И все работает.
     
  12. _proteus

    _proteus Member

    Публикаций:
    0
    Регистрация:
    25 мар 2008
    Сообщения:
    192
    Адрес:
    Казань
    TermoSINteZ
    честно говоря, не понял, что это((( Не трудно будет разъяснить?

    Я тут книжецу одну нашел по тематике:
    Д. Баррон "Ассемблеры и загрузчики" (1 Мб)
     
  13. _proteus

    _proteus Member

    Публикаций:
    0
    Регистрация:
    25 мар 2008
    Сообщения:
    192
    Адрес:
    Казань
    Хм... Что-то ее прицепить не получилось(((
     
  14. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    _proteus
    Есть еще Уэзерелл Ч. "Этюды для программистов"
    Книга американского специалиста по системному программированию — уникальный сборник задач по программированию из разных областей: моделирования, точности вычислений, обработки текстов, искусственного интеллекта, конструирования компиляторов. Большинство задач базируется на реальных и игровых ситуациях.
     
  15. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Помню такую книгу -- очень полезная оказалась в своё время...
     
  16. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    Альфред В. Ахо, Моника С. Лам, Рави Сети, Джеффри Д. Ульман Компиляторы. Принципы, технологии и инструментарий
    рассматриваются главные принципы создания компиляторов, детально анализируются лексическая и синтаксическая составляющие, а также генерация кода. Особый акцент авторы сделали на вопросах оптимизации кода (в многопроцессорных системах в том числе). Очень большое внимание уделено также технологическим вопросам создания компиляторов и соответствующему инструментарию. Авторы подробно рассматривают такие темы, как теоретические вопросы языков программирования, построение вычислительных систем. Большое число практических примеров значительно упрощает процесс восприятия.
     
  17. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    А зачем Баррона цеплять? Кому надо найдут...
     
  18. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    Для курсовой наверное можно и не оптимизировать длины переходов для ссылок вперед, предполагать что все переходы длинные и всё!
     
  19. _proteus

    _proteus Member

    Публикаций:
    0
    Регистрация:
    25 мар 2008
    Сообщения:
    192
    Адрес:
    Казань
    Задачи оптимизации не ставится. Лишь бы работало. И условиям соответствовало.
     
  20. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    _proteus
    Не трудно. YACC - Yet Another Compiler-Compiler
    Ну и по гуглу - инфы много будет.