Начиная программировать на языке ассемблера для микроконтроллеров ARM первое, с чем вы столкнетесь — это отсутствие какой либо среды для программирования (c первым проектом, программами для компиляции и сборки я уже разбирался). Причем бытует мнение, что для ассемблера ничего кроме блокнота и не нужно (максимум, «для гурманов» сообщество предложит использовать редактор с подсветкой кода). И этот подход в принципе имеет место быть — ровно на столько, на сколько удобно писать программы на С++ в блокноте — то есть до того момента, как вы перейдете от программ «Hello, Word» к чему то более сложному.

Некоторое время назад я высказал предложение о необходимости написания среды разработки (или хотя бы редактора) для программ на ассемблере, но в ответ не услышал ничего. Значит, нужно написать среду самому. Понятно, что это не будет уровень современных сред программирования, над которыми трудятся целые коллективы разработчиков (да и опыта у них намного больше чем у меня), но я и не ставлю цель конкурировать с ними по «навороченности» — мне всего лишь нужна среда для комфортного программирования на ассемблере.

Если вам нужно тоже самое и нужно именно «ехать, а не шашечки» — тогда добро пожаловать под кат.

Я никогда не писал сред разработки (да и на дельфях у меня опыт программирования мал) — поэтому решил создавать среду последовательным написанием редактора кода с последующим его усложнением по требованию/желанию и превращением в полноценную (в моем понимании) среду разработки на языке ассемблера.

Для начала отвечу на вопрос «почему все таки я пришел к написанию новой программы, а не использую готовые редакторы с подсветкой кода?»
Ответ прост: дело в том, что для программирования на языке ассемблера собственно подсветка кода — это функциональность скорее желательная, чем нужная — просто потому, что в каждой строке кода может быть только одна инструкция ассемблера, следовательно подсветка инструкций практически ничем не облегчает труд программиста на ассемблере.

Я же хочу получить редактор с функциональностью которая действительно бы помогала писать программы.
Поскольку я уже писал программы на ассемблере (в том числе начал это делать и для ARM) то из своих «хочу» выделил следующую функциональность которая по моему мнению будет востребована:
  1. Подсветка кода ассемблера с проверкой правильности синтаксиса команд (то есть не просто подсветили инструкцию ассемблера с суффиксами LDR или LDRD, а еще и проверили правильность введенных аргументов команды)
  2. Авто дополнение вводимого кода (PUSH -> POP, ITIT Block, и т. д.)
  3. Контроль глобальных и локальных меток
  4. Подсказка по инструкциям ассемблера
  5. Контроль параметров подпрограмм
  6. Поддержка программ как модулей с возможностью их добавления и удаления
  7. Контроль в редакторе опций условного исполнения
  8. Перенаправление сообщений консоли на среду, компиляция и компоновка при помощи GNU AS
  9. Файл- менеджер проекта с крупными значками
  10. Закладки в файл менеджере (переход в нужную папку одним кликом)
  11. Переход на метку программы в редакторе
  12. Автоматическое формирование списка констант модуля и дописывание в начало
  13. Система помощи по регистрам настройки микроконтроллера
  14. Мастеркода (автосоставитель кода) — например для настройки GPIO, SPI, DCMI и т.д.
  15. Эмуляция исполнения кода
  16. Настраиваемые окна среды (все! а не только окно редактора)
  17. Отладка (пока не понимаю как, но как задача висит)
  18. контроль за правильностью кода: (выдавать предупреждение при попытке использовать BL в подпрограмме без предварительного сохранения регистра LR, выдавать предупреждение при PUSH / POP командах в случае если список регистров не совпадает)

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

Первое за что я взялся — это интерфейс — в самом начале проекта я не стал «мудрить» и просто решил использовать MDI для построения среды: у меня есть главное окно, и каждый новый редактор открывается как дочернее. Такое решение мне нравиться больше чем SDI когда используются вкладки в редакторе кода — очень часто бывают ситуации когда редактируя один файл нужно подсмотреть что написано в другом — и приходиться подглядывать во второй файл либо переключаясь между вкладками (что очень быстро утомляет), либо открывая этот второй файл в другом редакторе (какой нить Notepad или Far) и смотреть там…
Мне же больше по душе возможность сделать так:

По большому счету — уменьшив шрифт можно разместить так и три окна — думаю в определенных случаях это будет удобно и востребовано. Поэтому такой интерфейс был взят за основу. Если кто то знает более удобный (или есть еще какие то соображения) — готов выслушивать.

Дальше начал писать редактор программы на языке ассемблера.
Первая задача которую я реализовал — это контроль за метками в программе.
Это очень удобно, поскольку во-первых позволяет сформировать список меток, во-вторых, сразу оповещать, что набранная метка уже объявлена:

Дополнительно появилась возможность по двойному клику на имени метки в списке сразу перейти на нее.
Так же планируется сделать добавление метки в программу выбором из списка


Следующая задача определение объявления константы и обработка математических выражений в значениях.
В настоящий момент программа распознает арифметические действия, причем в качестве операндов могут быть использованы как числовые значения (десятичное, шестнадцатеричное, двоичное число), так и имена меток и других констант

Известная бага — помоему не правильно определяется операция инверсии (!) — поправлю позже

Далее, если заглянув в Programming manual ARM процессоров — можно узнать, что у ARM разнообразие команд перемешено с разнообразием синтаксиса этих команд… и простые команды пересылки из регистра в регистр MOV R0, R1 могут запросто превратиться в пересылку со сдвигом: MOV R0, R1, LSR 19. Разбор синтаксиса команд для ARM процессора оказался интересной задачей! Поиск по русскоязычному интернету каких то примеров и подходов к такой задаче не дал — пришлось изобретать самому:

Каждую команду ARM процессора кодирую в виде строки с использованием определенных правил:
  • \ — указывает на символ который должен быть обязательно встречен, символ указывается после \
  • _ — обязательный символ пробел (0х20) или таб (0х09)
  • [] — указывает на обязательно встречающееся одно из сочетаний
  • {} — указывает на необязательно встречающееся сочетание
  • () — указывает на сочетание которое может повторяться
  • | — указывает что далее идет один из вариантов сочетаний (используется для [],{},() )
  • * — пропуск пробелов и табов
  • # — вариант окраски для символов которые считаются верными
  • s — строка заключенная в кавычки
  • v — объявление константы
  • e — расширенное значение: число, константа, метка
  • $ — указывает имя правила описанное в этом же файле

Номера цветов распределил следующим образом:
  • 0: ошибка в тексте
  • 1: примечание
  • 2: метка
  • 3: директива
  • 4: команда
  • 5: число
  • 6: константа
  • 7: математическое действие и знаки
  • 8: скобки группировки
  • 9: строка


После этого можно написать правило для проверки правильности условия исполнения команд:
$cond: #4 [ |\e\q |\n\e |\c\s |\h\s |\c\c |\l\o |\m\i |\p\l |\v\s |\v\c |\h\i |\l\s |\g\e |\l\t |\g\t |\l\e ]


А вот так описан регистр:
$reg: #4 * [ |\r [ |\1\0 |\1\1 |\1\2 |\1\3 |\1\4 |\1\5 |\0 |\1 |\2 |\3 |\4 |\5 |\6 |\7 |\8 |\9 ] |\s\p |\l\r |\p\c ]*


Сами же инструкции процессора описываются следующим образом:
Загрузка адреса в регистр
adr:{$cond}_$reg\,*e


бывают и более сложные случаи
$ldrstr_rec: $reg \, * \[ $reg { |\, * e * } \] * |\, * e * \] \! | \] * \, * e * | \, $reg { \, * \l \s \l _ * e } ]
ldr: [ |{$type} {$cond} _ $ldrstr_rec | _ $reg \, * \= e |{$type} \t {$cond} _ $reg \, * \[ $reg { \, * e } \] |{$type} {$cond} _ $reg \, e ]


Поскольку система команд процессоров может отличаться у различных семейств планирую, что будет несколько файлов в каждом из которых будут описаны все команды одного процессора, сейчас предполагаю, что это могут быть файлы следующих семейств: cortex-m4, cortex-m3, cortex-m1, cortex-m0.
Определение типа процессора (и загружаемого файла определений синтаксиса команд) планирую делать по открываемому файлу — по директиве компилятора .mcu и если ее не обнаружу — то запрашивать пользователя

Версию программы готовую в настоящий момент можно скачать по этой ссылке. Примеры небольших исходников на ассемблере лежат в папке samplecode — выбирайте любой…

Сразу скажу о известных багах (описанный глюк является багом :-):
— уже упомянутый выше — не правильно обрабатываемый '!'
— возможно мерцание горизонтального скрола текста при длинных строках (не умещающихся на экране) — знаю как буду править, сейчас не обращать внимание
— при смене шрифта в редакторе с не сохраненным текстом — текст теряется — пока сохранение текста не делал потому что там будут еще дополнения в функциональность редактора, сейчас не обращать внимание (шрифт менять до начала работы с текстом)
— цветовая окраска для категорий не выбирается — сделаю как будет время
— окна настроек директив и инструкций будут переделаны полностью, сейчас сделаны чтобы было удобно изменять правила разбора текста
— разбор текста в строке происходит при движении по ней курсора — поэтому если изменили правило — то двиньтесь по строке — правило будет применено.
— правила автоматически не сохраняются — пользуйтесь кнопкой сохранить — это все будет переделано при изменении окон настроек

В настоящий момент работа над редактором и средой продолжается.

Цель этой статьи — найти единомышленников..

Текущие задачи:
— развернуть сайт проекта (на хостингере есть аккаунт, есть личный домен, но нет времени разбираться) — если кто может настроить нечто вроде блога + форум — то знайте — я нуждаюсь в этой помощи (подробнее о задаче в переписке)
— написать и протестировать файлы правил для разных семейств микроконтроллеров — если вы уже смотрели демку — то видели наверное что еще не все директивы и инструкции описаны. Более того — возможно, что не всё получиться описать имеющимся набором правил -это будет ясно только после того как будут описаны все команды и директивы. Поэтому, если кто готов сделать доброе дело — то от вашей помощи не откажусь, помощь по написанию правил конечно готов оказать.
— если вы имеете какие то наработки в Delphi в части написания интерфейсов, или функциональности (которая может быть применена) — то готов слушать советы и предложения — сам в Delphi писал мало и давно… Сейчас фактически изучаю среду и язык заново
мой адрес электронной почты прежний: gorbukov собака яндекс ру

Комментарии (62)


  1. XanderBass
    15.03.2016 09:53
    +2

    мой адрес электронной почты прежний. Глупый вопрос: а какой? А то если нужна помощь с сайтом, то могу помочь.


    1. VitGo
      15.03.2016 10:11

      гм. знает все у нас яндекс… :-)
      кинул адрес в личку


  1. andy_p
    15.03.2016 09:55
    +3

    первое с чем вы столкнетесь — это отсутствие какой либо среды для программирования

    Простое гугление сразу приводит к нескольким вариантам сред для программирования на ассемблере в emacs.


    1. VitGo
      15.03.2016 10:20

      гм… может я не туда смотрю — но что там есть кроме подсветки кода ?


  1. RPG18
    15.03.2016 10:02

    Начиная программировать на языке ассемблера первое с чем вы столкнетесь — это отсутствие какой либо среды для программирования

    SASM – IDE для ассемблера


    1. VitGo
      15.03.2016 10:15
      +1

      функциональность сравните. к сожалению она очень и очень бедная....


    1. Source
      17.03.2016 10:53

      Я когда-то давно RadASM использовал


      1. VitGo
        17.03.2016 11:39

        Да, ниже мне кидали ссылку на нее.

        Мне не нравятся среды с SDI… :-( хоть убивайте… — это опять вторым документов нужно будет блокнот грузить или FAR :-(

        p.s. а вообще в выходные я наметил себе установить различных ассемблеров и посмотреть что у них есть из полезной функциональности...


  1. zirf
    15.03.2016 10:21

    Виталий, я сторонник того, что дело полезное. Разработчики микроконтроллеров предлагают свои среды разработки и компиляторы, с эмуляторами BlackJak'ом и ... и ценником. Но раз уж GNU AS тады так. А не знаю, как сейчас у Delphi с лицензией, есть ли хоть какая-то халява (ну хоть для разработчиков и студентов), если есть хостится лучше на github.com или bitbucket.com там есть wiki, repo трекер issues, некоторое подобие социалок, потом места известные но github, бесплатно дает только открытые репо. Зато людей можно привлечь кучу. Потом для сайта WordPress, для управления проктетом, ну подумать — у меня Remiine. (Это Ruby on Rails приложение не всякий хостер поддерживает.)


  1. twr
    15.03.2016 10:32
    +11

    1. Довольно странное решение начинать крупный проект на языке, который приходится изучать по ходу дела.
    2. Довольно странно разрабатывать сугубо виндовую IDE для кроссплатформенного ассемблера. Если хочется Паскаля, то почему не Lazarus?
    3. Довольно много внимания стоит уделить интерфейсу и юзабилити. То, что изображено на скриншотах, будет толкать конечного пользователя к выбору иных альтернатив.
    4. Довольно проблематично не найти в гугле IDE для ассемблера.
    5. Довольно сомнительно звучит заявление о том, что в планах отладчик, но нет понимания как его написать. Попробуйте тогда уж gdb прикрутить, чтобы велосипед не изобретать.


    1. VitGo
      15.03.2016 10:54

      1) согласен, но что то я не увидел толпы желающих помочь, поэтому стал делать сам.
      2) ну я вообще под виндой всегда был, есть, и по всей видимости буду… никсоподобные не скоро начнут делать простые и удобные ОС. Да и смысл сидеть на никсе чтобы запускать потом виндовые программы из эмуляции ?! :-) По поводу паскаля и лазаруса- тут по некоторым вопросам на дельфи форумах ответ не найти… а искать спецов по лазарусу тем более не хочется (потому что как правило спецы не отвечают на вопросы чайников. значит искать среди написанного — а написанного наверняка в разы меньше чем про дельфи)
      3) ну кого то наверное будет толкать, я не навязываюсь… с другой стороны повальное увлечение однооконным редактором меня убивает больше — потому как переключения из редактора в редактор очень быстро утомляет… если вас спугнул шрифт на скриншотах — это просто я на рабочем компе запустил приложение и не выставил шрифт… на работе 1200 по горизонтали, дома 1900 — потому и масштаб такой получился :-) плюс шрифт выбран не моноширинный…
      4) в гугле очень много редакторов с подсветкой кода… в некоторых есть запуск компилятора… — этого мало. ну а другая часть заточена под x86… конечно все можно настроить — только бы понять как…
      5) ничего сомнительного, просто пока не задумывался об этом


      1. twr
        15.03.2016 11:13
        +7

        Немного не по теме: лет 5 назад кончилось терпение и я с Винды пересел на Linux. Устраивает всё и как пользователя, и как разработчика. И таких как я тут наверняка немало. Так что я на Вашем месте не был бы так категоричен относительно простоты и удобства *nix :)

        По теме: в рунете форму всегда содержали мало полезной информации, если сравнивать с общими объёмами флуда. Поэтому лучшим помощником всегда была и есть официальная документация. И тут уже не особо важно о чём идёт речь, о Delphi или о Lazarus. Просто надо понимать, что ограничиваясь лишь одной Win-платформой Вы теряете весомую часть целевой аудитории Вашего продукта. В конце концов доля IT-профессионалов, использующих *nix, гораздо выше доли обычных пользователей. И Вы как разработчик мало что теряете, просто пишете код, который с минимальными телодвижениями можно компилировать под разные ОС.


        1. VitGo
          15.03.2016 11:32

          не хочу здесь холиварить по поводу ОС, поверьте, на какой нить -никс я регулярно пробую сесть… и постоянно нахожу какой то пустяк который нужно решить — и к сожалению еще ни разу не смог получить решение… самому к сожалению еще уровня не хватает разбираться…
          p.s. из последнего на ubuntu настроить удаленный графический рабочий стол — пару статей нашел где казалось бы нормально для новичка написано — но ни по одной не получилось сделать ничего… на форуме в ответ тишина… так что подождем пока юниксы станут проще и понятнее.

          по поводу аудитории — ее нет. есть отдельные люди которым это может быть интересно… опять таки сейчас проект в зачатке, если будет из него получаться что то серьездное и интересное — то тогда одновременно с рефакторингом можно будет попробовать перейти и на что то многоплатформенное (но думаю что востребовано это не будет). В первую очередь пишу для себя… и тех кому еще идея придется по душе.


          1. twr
            15.03.2016 12:45
            +3

            из последнего на ubuntu настроить удаленный графический рабочий стол — пару статей нашел где казалось бы нормально для новичка написано — но ни по одной не получилось сделать ничего <...> так что подождем пока юниксы станут проще и понятнее


            Юниксы не станут проще, если их не изучать. Под лежачий камень, как известно, вода не течёт. Это другой мир, другая философия, не винда. Вы же, переходя на новый язык программирования, не ждёте, когда он станет похожим на любимый Вами Паскаль? Статьи для новичков, где дан пошаговый рецепт из таинственных консольных команд, Вам не помогут, ибо нужно понимать как устройство ОС, так и сами эти команды.
            И да, под Linux можно запустить Team Viewer :)

            PS. Удачи в изучении нового!


          1. quverty
            15.03.2016 14:53
            +1

            Я в похожих случаях начинал c Delphi и в какой то момент либо запускал и поддерживал второй проект на Lazarus, а если такой подход не устраивал, в любом случае проверял работает ли проект в Wine (у меня xubuntu на внешнем диске в загрузке).


          1. Zapped
            15.03.2016 15:16

            ubuntu настроить удаленный графический рабочий стол

            http://c-nergy.be/blog/?p=5874
            любителям видео — https://www.youtube.com/watch?v=L1ay7toiJ6k
            первые ссылки в гугле по "ubuntu remote desktop"
            Если Вы искали по-русски (а судя по вашей IDE — скорее всего, да), то тут я хз...

            на форуме в ответ тишина

            что за "форум" такой? он единственный в своём роде?


            1. VitGo
              15.03.2016 15:34

              ну искал конечно по русски… не все знают английский свободно.

              я пытался сделать по этой инструкции http://mintlinux.ru/blogs/linux4me/v-poiskah-podklyuchenija-k-udalenomu-rabochemu-stolu-linux.html
              потом еще какую то находил
              спрашивал здесь http://mintlinux.ru/forum/thread11303.html (до этого ставил самый свежий и самый рекомендованый дистрибутив)

              В общем к сожалению пока правило только подтверждается — вот так вот "выкрикнуть" что вот же все написано — так сразу находятся специалисты, а когда спрашиваешь конкретно что и где посмотреть (с компьютером на котором не работает) — так никого нет :-)

              я так и написал выше: начинать споры об ОС с гениальными пользователями *-никсов не хочу, они опять прибегут на 1 минуту, расскажут что все там работает отлично, и убегут когда нужна будет их помощь (причем ничего после их советов и не заработает :-)))

              поэтому и буду писать только для винды (для никсов просто не смогу проверить работу :-)))
              аминь.


              1. Zapped
                15.03.2016 15:46

                я пытался сделать по этой инструкции mintlinux.ru/blogs/linux4me/v-poiskah-podklyuchenija-k-udalenomu-rabochemu-stolu-linux.html

                это запуск графических приложений на сервере с отображением на локальном X-сервере )
                это слабо подходит под Ваше "удаленный графический рабочий стол"...

                спрашивал здесь mintlinux.ru/forum/thread11303.html

                есть ещё LOR, например )
                toster.ru, наконец ))

                *да я и не собираюсь спорить )))


        1. VitGo
          16.03.2016 19:48

          кстати про лазарус
          пока никто ничего ответить не смог.: http://www.cyberforum.ru/lazarus/thread1686779.html#post8891492

          вы на самом деле предлагаете на "этом" писать ?

          p.s. все еще надеюсь что это не глюк а все таки неправильное с точки зрения фрипаскаля программирование… может быть что то еще вызывать нужно?


          1. twr
            17.03.2016 09:25

            1. VitGo
              17.03.2016 10:43

              А по вопросу что можете сказать ?

              Суть того что я написал в том, что не хочется заниматься изучением новой среды в которой полно недокументированных глюков — мало того сам не уверен в своих знаниях, так еще и глюки, такие как я описал выше, быстро собьют настрой вообще что либо писать...

              причем этот глюк я нашел сам, буквально через 10 минут после того как поставил среду и начал пробовать в ней писать...


              1. twr
                17.03.2016 13:41
                +1

                По вопросу могу сказать, что Вы снова игнорируете документацию и не пытаетесь разобраться в предмете самостоятельно, уповая на ответы с форумов. Поведение формы, описанное Вами, не есть глюк. Из документации:

                TControl.Align Specifies the placement of the control inside its Parent.

                Очевидно, что у формы верхнего уровня нет parent'а.


                1. VitGo
                  17.03.2016 13:46

                  да, уже прочитал.


                  1. VaalKIA
                    17.03.2016 21:46

                    Рекомендую форум http://delphikingdom.ru/, хотя вопросы там не быстро публикуются, особенно самый первый, но он и как база знаний хорош тоже.


          1. quverty
            17.03.2016 14:05

            И ещё там RichEdit нет. Для меня основной аргумент, что бесплатных версий Делфи нет давно, а бесплатные все с урезанной функциональностью.


            1. Zapped
              17.03.2016 15:37

              TRichMemo is a component to replace Delphi TRichEdit component. It's designed in cross-platform way, so implementation is possible for the following platforms: Win32, MacOSX, Linux. Since, being cross-platform is the primary target. The native RichMemo API can be extended to make it Delphi's RichEdit compatible.

              Change Log
              Version 1.0.0 22th Jun 2009


              http://wiki.freepascal.org/RichMemo

              насчёт его функциональности — не знаю, насколько она урезана


              1. quverty
                17.03.2016 16:32

                А он живой? Там 2009 и ссылка не работает. Я сейчас что-то смутно начал вспоминать, но он в любом случае в компонентах не присутствует и мне в свое время пришлось использовать SynEdit, установив его и на Дельфи. Проблема, что в Lazarus SynEdit свой, поддерживать два проекта параллельно стало неудобно.


              1. quverty
                17.03.2016 16:55

                Я имел в виду в стандартных компонентах предустановленных в Lazarus его нет. Но он вроде живой — как раз сегодня обновлён архив.


            1. VitGo
              17.03.2016 18:09

              ну в лазарусе есть synedit — по сравнению с ним richedit жалкая поделка :-)))

              я потихоньку ковыряю лазарус — но пока в дельфи мне комфортнее...

              кстати уже сделал описание основного набора команд для cortex-m4 в редакторе :-) теперь буду писать обработку инклудов


      1. Zapped
        15.03.2016 15:17

        тут по некоторым вопросам на дельфи форумах ответ не найти

        ой ли?!
        например?


        1. VitGo
          15.03.2016 15:20

          как получить количество символов в RichEdit по горизонтали?
          то есть например я знаю как узнать первую и последнюю показываемые строки. ну или как вариант узнать с какого по какой символ строки напечатан в окне редактора.?
          а как тоже самое сделать с колонками ?

          p.s. пока кроме как вычислять по ширине компонента в пикселах и ширине символа в пикселе (благо они у меня моноширинные предполагаются) ничего не придумал.


          1. Zapped
            15.03.2016 15:34
            +1

            EM_CHARFROMPOS message?
            N.B. RichEdit — виндовый контрол, TRichEdit — лишь обёртка
            пример для TMemo

            правильно сказал twr:

            Довольно странное решение начинать крупный проект на языке, который приходится изучать по ходу дела.


            1. VitGo
              15.03.2016 15:45

              о таком использовании этого сообщения я не подумал. спасибо. попробую сегодня


            1. VitGo
              16.03.2016 06:46

              проверил предложенное вами решение — это тоже костыль :-( потому что дает значение правой границы в зависимости от количества символов (уже набранных) в проверяемой строке…
              в общем то мое решение проще.


              1. Alexeyslav
                16.03.2016 17:37
                +1

                Там еще кстати есть ограничение на максимальную длину одной строки… тоже неприятно столкнулся с таким явлением. Вроде бы в этих контролах можно хранить не более 10К в одной строке, всё лишнее переносится на следующую… В программах вроде бы таких длинных строк не встречается, но кто знает...


  1. Godless
    15.03.2016 10:43

    Лучше IDE для ASM не видел.
    Правда на чистом давно не писал, но все же...

    PS: выше про SASM написали, пропустил обзор, вроде заслуживает внимания...


  1. VitGo
    15.03.2016 11:01
    +1

    АААА!!! я понял свою ошибку! я не написал что ассемблер для ARM (исправил в названии статьи)
    я пишу среду для STM32 микроконтроллеров, в принципе подойдет и для других ARM 32bit…
    про x86 я и не думаю даже :-)


  1. hurricup
    15.03.2016 11:03
    +2

    Прям сразу захотелось запилить плагинчик для IDEA


    1. VitGo
      15.03.2016 11:05
      +1

      перечень хотелок есть — ЗАПИЛИТЕ!!! :-)


      1. hurricup
        15.03.2016 11:14
        +3

        Через месяцок-два с перлом закончу, посмотрим. Сразу два не осилить :)
        ну и хочется это здорово — вопрос насколько это востребовано и сложен синтаксис с учетом сахаров и мета-информации.
        Но в целом считаю не очень разумным начинать с нуля. Всегда лучше делать под платформу, какая ближе по сердцу — вим/эклипс/идея
        А так — львиная доля усилий уйдет на повторение того что уже сделали другие за много-много лет.


        1. VitGo
          15.03.2016 11:25

          не востребовано совершенно (и скорее всего останется таким)

          ну если для того чтобы задачки по решать — то синтаксис интересный!
          например может быть MOV R0, R1 а может быть MOV R0, R1, LSR 1, или для большего веселья ADDSNE R0, R1, LSR 1
          так же есть у некоторых команд размерности (B, SB, H, SH) и условия исполнения по флагам (EQ, NE, CS, HS ...) и еще между ними могут быть признаки режима, например для LDRBTNE R0, [R1] — это LDR с байтом (B) в не привилигерованном режиме(T) по "неНоль" (NE)


          1. hurricup
            15.03.2016 11:27

            Если все можно описать с помощью BNF то вообще не проблема. Хотя после перла, мне кажется, трудно меня напугать уже каким-либо из реальных языков.
            Ну если не востребованно — не очень интересно. Хотя, можно было бы запилить некую платформу для ассемблера, к которому можно было бы пилить микро-плагинчики для разных платформ.


            1. VitGo
              15.03.2016 11:44

              конечно можно! иначе как бы компилятор разбирал :-)))

              многие вещи по началу не востребованы… в настоящий момент среды для разработки программ на ассемблере для микроконтроллеров фактически нет.
              есть просто использование стандартных сред (обычно си) для языка ассемблера. никто специфичные для ассемблера потребности не учитывает и не решает…
              казалось бы мелочи:

              • вести список локальных меток для быстрого к ним перехода — где вы это увидели у редакторов которые выше упомянули? (пусть даже под x86) — в лучшем случае у 1 или 2ух..
              • вести список переменных для того чтобы вставлять их в программу
              • разбирать синтаксис команд на этапе ввода (а не выдавать ошибки при компиляции)...
              • про многооконность редактора я уже писал

              и это самое простое что можно сделать!
              пока же все редакторы ассемблера что есть это просто подсветка (простейшая) + компиляция (внешним компилятором) и у некоторых продвинутых — отладка (вот это конечно классная вещь).

              В общем спорить не хочу. кто сталкивался — тот меня поймет, кто пишет на Си — тому конечно вся эта возня с ассемблером вообще не понятно — он привык в инлайн все команды размещать и не париться (потому что от силы размещает 50-80 команд)


              1. hurricup
                15.03.2016 11:50
                +1

                Компилятор может как раз разбирать как угодно и ему bnf не нужен. А для IDEA, например, чтобы с минимальными затратами сделать языковое расширение нужен bnf.
                Т.е. сделать можно все что угодно, вопрос трудозатрат.


              1. Alexeyslav
                15.03.2016 12:24

                Ох как согласен.


  1. Alexeyslav
    15.03.2016 12:21

    Это, пожалуй, здорово. будет хоть одна среда под ассемблер не требующая для комфортной работу 8Гб оперативки из-за универсальности среды.
    Пока для этих целей использую Notepad++ и под AVR, под STM32 его будет долго настраивать. Очень не хватает списка меток, и не просто меток а с классификацией меток на внутренние и метки начала подпрограмм. Внутренние они вобщем-то не очень актуальны в глобальной навигации, только если курсор находится внутри подпрограммы. А вот перечень подпрограмм очень нужен, с разбивкой по "модулям"-файлам с коментариями выполняемой функции и параметров. Отдельно список дефайнов и макросов...


    1. hurricup
      15.03.2016 12:45

      Ну зачем же так передергивать? У меня идея с открытым не маленьким проектом занимает 1 гиг после 4 часов работы. С учетом того, что в основном она работает с моим личным не оптимальным (читай — кривым) плагином, который жрет в массе мест где этого можно не делать. И больше занимать уже не будет. Все расходы памяти и процессорного времени — плата за функционал.
      Все что простое и позволяет лишь печатать — ничего не жрет и ничего не умеет. Чем больше умеет — тем больше жрет. Вполне логично.
      Да, есть оверхед за счет универсальности, но количество разных плюшек из коробки, получаемое от существующих платформ компенсирует этот незначительный оверхед.
      В общем случае, все написанное с нуля в качестве хобби функционально будет хуже чем то, чем много людей занимаются профессионально много лет. Да, если это интересно как процесс — велосипеды это отлично. Если речь о конечном продукте — нужно максимально реюзать то, что уже написано до тебя. Выражаясь словами классика: "Если я видел дальше других, то потому, что стоял на плечах гигантов"


      1. VitGo
        15.03.2016 12:47
        +1

        я думаю что никто из за оперативки не переживает…
        просто функциональность нужна, а ее в других средах нет...

        а память — память это просто к слову прилось… в конце концов один раз разориться на 16 гигов и больше не думать об этом :-)


        1. hurricup
          15.03.2016 12:55

          Ну и для асма все будет работать очень быстро и жрать мало в силу простоты и плоскости синтаксического дерева.


          1. VitGo
            15.03.2016 12:57

            ну это до тех пор пока не начнет инклуды отрабатывать и внешние метки проверять… — там то его дисковые операции и замедлят до среднестатистического :-)))


            1. hurricup
              15.03.2016 13:16

              Не скажу за другие платформы, но в IDEA это все отлично решено с помощью системы индексации. И в силу простоты синтаксиса тут будет все летать.


              1. VitGo
                15.03.2016 13:31

                осталось дождаться когда вы "запилите" плагин :-)


                1. hurricup
                  15.03.2016 13:48
                  +2

                  Когда и если :) Я рекомендую вам тоже ознакомиться с платформой. Я смогу подсказать если что.


    1. VitGo
      15.03.2016 12:46

      вот вот… сразу видно коллегу по ассемблеру :-) тот кто пишет на других языках — нас не поймет :-)

      что значит внутренние метки и метки начала подпрограмм? их как то выделить?
      для внешних меток есть GLOBAL / EXTERN (несмотря на то что GNUAS не требует по EXTERN среда узнает что нужно проверить внешнюю метку)

      или хочется сделать список меток именно подпрограмм? (тогда нужно договориться о каком то идентификаторе чтобы их в отдельный список автоматом среда собирала)


      1. Alexeyslav
        15.03.2016 14:34

        Внутренние — это те что внутри подпрограмм и больше нигде не используются.
        А метки подпрограмм — это метка с которой начинается код и заканчивается командой возврата из подпрограммы, все метки что находятся внутри этого блока — внутренние, и интереса в глобальном смысле не представляют, хоть для компилятора они все на одно лицо.


  1. Gorthauer87
    15.03.2016 14:20
    +1

    Qt Creator вполне неплохо справляется с asm файлами, умеет их даже отлаживать по шагам. Нет, конечно, всяких мелочей типа проверки корректности синтаксиса, да и всяких умных сниппетов, но не уверен, что это так часто уж нужно. На асме редко кто пишет больше 1000 строчек.


    1. Alexeyslav
      15.03.2016 14:34
      +1

      Я походу тот самый редкий монстр…


      1. VitGo
        15.03.2016 14:37

        вдвоем :-)


  1. Ivan_83
    15.03.2016 16:28
    +1

    Я последние лет 6 писал проги в блокнотике: Notepad++, Kate, Geany.
    Вполне себе сложнее хеловорда: http://netlab.dhis.org/wiki/ru:software:ssdpd:index http://www.netlab.linkpc.net/wiki/ru:software:msd:lite и другие.
    Это конечно не плюсы, но не сказать чтобы меня сильно напрягало отсутствие автокомплита, интеграции со сборкой и отсутствие отладки, ровно как и понятия «проект».

    С другой стороны, сейчас пишу в CodeLite, указанные выше фишки очень доставляют.

    Можно попробовать допилить диалект асма чтобы его CodeLite или QTCreator начали понимать, это будет сильно быстрее чем пилить с нуля свою IDE.


  1. VaalKIA
    15.03.2016 23:20
    +1

    Попробуйте поспрашивать на ресурсе http://zx-pk.ru/forum.php, там любят ассемблеры, помниться Медноногов писал свой кроссассемблер, что бы написать ЧВ, и среди разработчиков как-то обсуждали трёхоконный редактор. Вообще, по части ассемблеров и какими они должны быть, что бы быть удобными, там должны знать и иметь практический опыт.

    Ну и присодиняюсь к комментариям выше — используйте Лазарус, он во многом совместим с Дельфи.


    1. Alexeyslav
      16.03.2016 17:39

      Но только не по человечности по отношению к программисту. В последний раз когда я его пробовал, он выдавал файлы по 10М на простейший проект и очень сильно затруднена отладка и интерпретация сообщений компилятора об ошибках. Что-то с тех пор изменилось?


      1. quverty
        17.03.2016 14:45

        По-моему ответ на первый вопрос уже чуть ли не прямо в readme при инсталляции выскакивает, настолько часто его задают. Мол чтобы избежать этого надо в параметрах проекта установить два флажка — символы отладки во внешний файл, удалять символы из исходника. Мне показалось, он за последние годы сильно улучшился, а размер файлов теперь и у Дельфи достаточно большой.