Программисты на С++ и знающие ассемблер есть???

    • DjRMaestro
      DjRMaestro
      Золото
      На форуме с: 25.02.2008 Сообщения: 3.516
      Значит проблема состоит вот в чем: задали курсовой написать, а в нем нужно реализовать на С++ кусочек алгоритма 2 прохода ассемблера. Но вот проблема: нифига не могу понять чего от меня требуется. Кто что нить знает по этому поводу пожалуйста подскажите. Алгоритм есть, если надо могу выложить. В долгу не останусь!!!
  • 10 ответов
    • yudinetz
      yudinetz
      Бронза
      На форуме с: 07.03.2009 Сообщения: 1.769
      обычно, преподаватель и создан для всех вопросов.
      дома каждый может обучаться сам, зачем тогда нужен универ?
    • pavvlyk52
      pavvlyk52
      Бронза
      На форуме с: 12.01.2008 Сообщения: 1.117
      Оригинал пользователя yudinetz
      обычно, преподаватель и создан для всех вопросов.
      дома каждый может обучаться сам, зачем тогда нужен универ?
      Он и не нужен =)
    • profaller
      profaller
      Бронза
      На форуме с: 18.09.2008 Сообщения: 30
      выкладывай, глянем...все равно сцуко в ноль играю, заброшу покер на пару дней...
    • DjRMaestro
      DjRMaestro
      Золото
      На форуме с: 25.02.2008 Сообщения: 3.516
      Оригинал пользователя yudinetz
      обычно, преподаватель и создан для всех вопросов.
      дома каждый может обучаться сам, зачем тогда нужен универ?
      та вот дело в том что в универе он нам читал С++ а тут дал написать ассемблер:( а вот сам ассемблер нам не читали. ну кое что, то что сам поискал, почитал я то понял но вот мля всеравно как сделать курсач хз. сдеть его нужно 12 числа а не написано не 1 строчки. ну и впринципе с описанием и оформлением я еще как нить разберусь (ну типа там предисловие и все остальное) но вот саму прогу в С не напишу. вот так. ну и универ конечно нах не нужен если все так делать, но тута вообще проблема хреноватая. так что буду рад если кто поможет ну и конечно же в долгу однозначно не останусь.
    • profaller
      profaller
      Бронза
      На форуме с: 18.09.2008 Сообщения: 30
      ты наверное пропустил мой пост выше? я ж тебе говорю выкладывай, я гляну, увлекался раньше реверсингом, так что с асмом более менее...
    • DjRMaestro
      DjRMaestro
      Золото
      На форуме с: 25.02.2008 Сообщения: 3.516



      Есть значит вот такой алгоритм. Это алгоритм 2-го прохода ассемблера. По этому алгоритму нужно написать прогу на С++. Думаю для серьезных программеров не проблема. Нужно написать прогу но она должна состоять из 2 типа подпрограмм ( но по сути это будут 2 разные программы). На алгоритме это соответственно выделенные черным и красным цветом участки. Так же если не видно алгоритма можно посмотреть его вот на этой сцылке: http://khpi-iip.mipk.kharkiv.edu/library/sp/sp2/topic2.html ну и так же там есть некая дополнительная инфа.
      Ах да кто сможет помочь хоть чем то пишите на асю 354-342-918 ну или здесь. Я естественно в долгу ОООЧЕНЬ хорошо не останусь. :)


      Вот то, что делается на каждом шаге алгоритма:


      1. Начало 2-го прохода ассемблирования.
      2. Начальные установки:
      o создание пустой таблицы базовых регистров;
      o открытие промежуточного файла исходного модуля;
      o установка в FASLE признака окончания
      3. Признак окончания TRUE?
      4. Считывание следующей записи промежуточного файла.
      5. Если запись промежуточного файла описывает комментарий, переход на печать строки листинга
      6. Выясняется, содержит оператор команду или директиву
      7. Если оператор содержит команду, формируется байт кода операции (код выбирается из таблицы команд) в объектном коде.
      8. Выделение следующего элемента из списка операндов с удалением его из списка и с проверкой, не обнаружен ли при выделении конец списка операндов?
      9. Если конец не обнаружен, обрабатывается выделенный операнд. Проверяется, не превысило ли число операндов требуемого для данного типа команды (выбирается из таблицы команд)
      10. Если число операндов превышает требуемое - формирование сообщения об ошибке
      11. Если число операндов правильное, распознается и проверяется тип операнда.
      12. Если тип операнда не распознан или недопустим для данной команды - формирование сообщения об ошибке.
      13. Есть ли в команде имя?
      14. Если в команде есть имя, оно ищется в таблице символов.
      15. Если имя в таблице символов не найдено - формирование сообщения об ошибке.
      16. Если найдено имя в таблице символов, оно переводится в "база-смещение"
      17. Если имени в команде нет, выполняется разбор и интерпретация операнда с проверкой правильности его кодирования.
      18. Если обнаружены ошибки в кодировании операнда - формирование сообщения об ошибке.
      19. Формируется код поля операнда и заносится в объектный код команды и обрабатывается следующий элемент списка операндов.
      20. Если обнаружен конец списка операндов, проверяется, не меньше ли число операндов требуемого для данного типа команды. Если число операндов соответствует требуемого, управление переходит на вывод объектного кода.
      21. Если число операндов меньше требуемого - формирование сообщения об ошибке
      22. Если обрабатываемый оператор является директивой, алгоритм разветвляется, в зависимости от того, какая это директива. При обработке любой директивы производится разбор и анализ ее операндов и (не показано на схеме алгоритма) возможно формирование сообщения об ошибке.
      23. Обработка директивы типа DD включает в себя:
      o выделение элементов списка операндов;
      o для каждого элемента - распознавание типа и значения константы;
      o генерация объектного кода константы;
      o обработка возможных коэффициентов повторения.
      24. Обработка директивы типа BSS может вестись точно так же, как и DD за исключением того, что вместо кода константы генерируются некоторые "пустые" коды. Однако, эти коды не нужны в объектном модуле, они могут не генерироваться, в этом случае должны предприниматься некоторые действия, формирующие "разрыв" в объектных кодах.
      25. Обработка директивы типа USING (ASSUME) включает в себя занесение в соответствующую строку таблицы базовых регистров значения операнда-адреса и установку для данного регистра признака использования.
      26. Обработка директивы типа USING (ASSUME) включает в себя занесение в соответствующую строку таблицы базовых регистров значения операнда-адреса и установку для данного регистра признака использования.
      27. Обработка директивы END устанавливает признак окончания в TRUE. При обработке этой директивы в объектный модуль также может заносится стартовый адрес программы - параметр директивы.
      28. Обработка прочих директив ведется по своим алгоритмам.
      29. После окончания обработки команды или директивы сформированный объектный код выводится в файл объектного модуля.
      30. Печать строки листинга. На эту точку также управление передается при выявлении ошибок. При наличии ошибки сообщение об ошибке печатается после строки листинга. Управление затем передается на считывание следующей записи промежуточного файла.
      31. После того, как установлен признак окончания работы формируются и выводятся в объектный модуль коды литерального пула, таблицы связываний и перемещений.
      32. Закрываются файлы, освобождается выделенная память.
      33. Работа Ассемблера завершается.
    • DjRMaestro
      DjRMaestro
      Золото
      На форуме с: 25.02.2008 Сообщения: 3.516
      Оригинал пользователя profaller
      ты наверное пропустил мой пост выше? я ж тебе говорю выкладывай, я гляну, увлекался раньше реверсингом, так что с асмом более менее...
      вот выложил:) глянь плз. если есть мысли пиши на асю, обговорим это дело.
    • profaller
      profaller
      Бронза
      На форуме с: 18.09.2008 Сообщения: 30
      немного непонятно что иммено тебе нужно. тебе надо накодить реально работающий транслятор? или что? ты б действительно у препода спросил =) я б взялся кодить, но на С не пишу, могу на дельфях такой алгос замутить, но если реальнло тебе надо транслятор, то лучше поинтересуйся у парней на васм.ру ну или на крэклабе, за вознагрождение тебе там сто пудов подсобят...
    • DjRMaestro
      DjRMaestro
      Золото
      На форуме с: 25.02.2008 Сообщения: 3.516
      Оригинал пользователя profaller
      немного непонятно что иммено тебе нужно. тебе надо накодить реально работающий транслятор? или что? ты б действительно у препода спросил =) я б взялся кодить, но на С не пишу, могу на дельфях такой алгос замутить, но если реальнло тебе надо транслятор, то лучше поинтересуйся у парней на васм.ру ну или на крэклабе, за вознагрождение тебе там сто пудов подсобят...
      ну да написать надо на С а вот чтоб работал нужно но не обязательно. это объясняется тем, что нужно сделать всего 2 куска алгоритма почти не связанных друг с другом. ну ты там подумай, может кто знакомый есть кто может такую штуку замутить на С. и спс за подсказки где можно сделать такую тему:)
    • BoomeRGUAP
      BoomeRGUAP
      Бронза
      На форуме с: 21.07.2008 Сообщения: 1.080
      Курс случайно не "Информационные технологии"? помню писали мы такую шляпу для H8800. Там всё очень просто : на входе ассемблерный код на выходе бинарник, т.е. моделируем работу транслятора для абстрактной машины.
      Для того чтобы это дело, хотя бы в черне, разрешить необходимо знать физическую структуру абстрактной машины (в основном систему регистров).
      Сырцы свои уже вряд ли найду, но если тебе нужно могу поспрашивать, может осталось у кого...