Некоторое время назад я высказал предложение о необходимости написания среды разработки (или хотя бы редактора) для программ на ассемблере, но в ответ не услышал ничего. Значит, нужно написать среду самому. Понятно, что это не будет уровень современных сред программирования, над которыми трудятся целые коллективы разработчиков (да и опыта у них намного больше чем у меня), но я и не ставлю цель конкурировать с ними по «навороченности» — мне всего лишь нужна среда для комфортного программирования на ассемблере.
Если вам нужно тоже самое и нужно именно «ехать, а не шашечки» — тогда добро пожаловать под кат.
Я никогда не писал сред разработки (да и на дельфях у меня опыт программирования мал) — поэтому решил создавать среду последовательным написанием редактора кода с последующим его усложнением по требованию/желанию и превращением в полноценную (в моем понимании) среду разработки на языке ассемблера.
Для начала отвечу на вопрос «почему все таки я пришел к написанию новой программы, а не использую готовые редакторы с подсветкой кода?»
Ответ прост: дело в том, что для программирования на языке ассемблера собственно подсветка кода — это функциональность скорее желательная, чем нужная — просто потому, что в каждой строке кода может быть только одна инструкция ассемблера, следовательно подсветка инструкций практически ничем не облегчает труд программиста на ассемблере.
Я же хочу получить редактор с функциональностью которая действительно бы помогала писать программы.
Поскольку я уже писал программы на ассемблере (в том числе начал это делать и для ARM) то из своих «хочу» выделил следующую функциональность которая по моему мнению будет востребована:
- Подсветка кода ассемблера с проверкой правильности синтаксиса команд (то есть не просто подсветили инструкцию ассемблера с суффиксами LDR или LDRD, а еще и проверили правильность введенных аргументов команды)
- Авто дополнение вводимого кода (PUSH -> POP, IT — IT Block, и т. д.)
- Контроль глобальных и локальных меток
- Подсказка по инструкциям ассемблера
- Контроль параметров подпрограмм
- Поддержка программ как модулей с возможностью их добавления и удаления
- Контроль в редакторе опций условного исполнения
- Перенаправление сообщений консоли на среду, компиляция и компоновка при помощи GNU AS
- Файл- менеджер проекта с крупными значками
- Закладки в файл менеджере (переход в нужную папку одним кликом)
- Переход на метку программы в редакторе
- Автоматическое формирование списка констант модуля и дописывание в начало
- Система помощи по регистрам настройки микроконтроллера
- Мастеркода (автосоставитель кода) — например для настройки GPIO, SPI, DCMI и т.д.
- Эмуляция исполнения кода
- Настраиваемые окна среды (все! а не только окно редактора)
- Отладка (пока не понимаю как, но как задача висит)
- контроль за правильностью кода: (выдавать предупреждение при попытке использовать 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)
RPG18
15.03.2016 10:02Начиная программировать на языке ассемблера первое с чем вы столкнетесь — это отсутствие какой либо среды для программирования
SASM – IDE для ассемблераSource
17.03.2016 10:53Я когда-то давно RadASM использовал
VitGo
17.03.2016 11:39Да, ниже мне кидали ссылку на нее.
Мне не нравятся среды с SDI… :-( хоть убивайте… — это опять вторым документов нужно будет блокнот грузить или FAR :-(
p.s. а вообще в выходные я наметил себе установить различных ассемблеров и посмотреть что у них есть из полезной функциональности...
zirf
15.03.2016 10:21Виталий, я сторонник того, что дело полезное. Разработчики микроконтроллеров предлагают свои среды разработки и компиляторы, с эмуляторами
BlackJak'ом и ...и ценником. Но раз уж GNU AS тады так. А не знаю, как сейчас у Delphi с лицензией, есть ли хоть какая-то халява (ну хоть для разработчиков и студентов), если есть хостится лучше на github.com или bitbucket.com там есть wiki, repo трекер issues, некоторое подобие социалок, потом места известные но github, бесплатно дает только открытые репо. Зато людей можно привлечь кучу. Потом для сайта WordPress, для управления проктетом, ну подумать — у меня Remiine. (Это Ruby on Rails приложение не всякий хостер поддерживает.)
twr
15.03.2016 10:32+11- Довольно странное решение начинать крупный проект на языке, который приходится изучать по ходу дела.
- Довольно странно разрабатывать сугубо виндовую IDE для кроссплатформенного ассемблера. Если хочется Паскаля, то почему не Lazarus?
- Довольно много внимания стоит уделить интерфейсу и юзабилити. То, что изображено на скриншотах, будет толкать конечного пользователя к выбору иных альтернатив.
- Довольно проблематично не найти в гугле IDE для ассемблера.
- Довольно сомнительно звучит заявление о том, что в планах отладчик, но нет понимания как его написать. Попробуйте тогда уж gdb прикрутить, чтобы велосипед не изобретать.
VitGo
15.03.2016 10:541) согласен, но что то я не увидел толпы желающих помочь, поэтому стал делать сам.
2) ну я вообще под виндой всегда был, есть, и по всей видимости буду… никсоподобные не скоро начнут делать простые и удобные ОС. Да и смысл сидеть на никсе чтобы запускать потом виндовые программы из эмуляции ?! :-) По поводу паскаля и лазаруса- тут по некоторым вопросам на дельфи форумах ответ не найти… а искать спецов по лазарусу тем более не хочется (потому что как правило спецы не отвечают на вопросы чайников. значит искать среди написанного — а написанного наверняка в разы меньше чем про дельфи)
3) ну кого то наверное будет толкать, я не навязываюсь… с другой стороны повальное увлечение однооконным редактором меня убивает больше — потому как переключения из редактора в редактор очень быстро утомляет… если вас спугнул шрифт на скриншотах — это просто я на рабочем компе запустил приложение и не выставил шрифт… на работе 1200 по горизонтали, дома 1900 — потому и масштаб такой получился :-) плюс шрифт выбран не моноширинный…
4) в гугле очень много редакторов с подсветкой кода… в некоторых есть запуск компилятора… — этого мало. ну а другая часть заточена под x86… конечно все можно настроить — только бы понять как…
5) ничего сомнительного, просто пока не задумывался об этомtwr
15.03.2016 11:13+7Немного не по теме: лет 5 назад кончилось терпение и я с Винды пересел на Linux. Устраивает всё и как пользователя, и как разработчика. И таких как я тут наверняка немало. Так что я на Вашем месте не был бы так категоричен относительно простоты и удобства *nix :)
По теме: в рунете форму всегда содержали мало полезной информации, если сравнивать с общими объёмами флуда. Поэтому лучшим помощником всегда была и есть официальная документация. И тут уже не особо важно о чём идёт речь, о Delphi или о Lazarus. Просто надо понимать, что ограничиваясь лишь одной Win-платформой Вы теряете весомую часть целевой аудитории Вашего продукта. В конце концов доля IT-профессионалов, использующих *nix, гораздо выше доли обычных пользователей. И Вы как разработчик мало что теряете, просто пишете код, который с минимальными телодвижениями можно компилировать под разные ОС.VitGo
15.03.2016 11:32не хочу здесь холиварить по поводу ОС, поверьте, на какой нить -никс я регулярно пробую сесть… и постоянно нахожу какой то пустяк который нужно решить — и к сожалению еще ни разу не смог получить решение… самому к сожалению еще уровня не хватает разбираться…
p.s. из последнего на ubuntu настроить удаленный графический рабочий стол — пару статей нашел где казалось бы нормально для новичка написано — но ни по одной не получилось сделать ничего… на форуме в ответ тишина… так что подождем пока юниксы станут проще и понятнее.
по поводу аудитории — ее нет. есть отдельные люди которым это может быть интересно… опять таки сейчас проект в зачатке, если будет из него получаться что то серьездное и интересное — то тогда одновременно с рефакторингом можно будет попробовать перейти и на что то многоплатформенное (но думаю что востребовано это не будет). В первую очередь пишу для себя… и тех кому еще идея придется по душе.twr
15.03.2016 12:45+3из последнего на ubuntu настроить удаленный графический рабочий стол — пару статей нашел где казалось бы нормально для новичка написано — но ни по одной не получилось сделать ничего <...> так что подождем пока юниксы станут проще и понятнее
Юниксы не станут проще, если их не изучать. Под лежачий камень, как известно, вода не течёт. Это другой мир, другая философия, не винда. Вы же, переходя на новый язык программирования, не ждёте, когда он станет похожим на любимый Вами Паскаль? Статьи для новичков, где дан пошаговый рецепт из таинственных консольных команд, Вам не помогут, ибо нужно понимать как устройство ОС, так и сами эти команды.
И да, под Linux можно запустить Team Viewer :)
PS. Удачи в изучении нового!
quverty
15.03.2016 14:53+1Я в похожих случаях начинал c Delphi и в какой то момент либо запускал и поддерживал второй проект на Lazarus, а если такой подход не устраивал, в любом случае проверял работает ли проект в Wine (у меня xubuntu на внешнем диске в загрузке).
Zapped
15.03.2016 15:16ubuntu настроить удаленный графический рабочий стол
http://c-nergy.be/blog/?p=5874
любителям видео — https://www.youtube.com/watch?v=L1ay7toiJ6k
первые ссылки в гугле по"ubuntu remote desktop"
Если Вы искали по-русски (а судя по вашей IDE — скорее всего, да), то тут я хз...
на форуме в ответ тишина
что за "форум" такой? он единственный в своём роде?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 минуту, расскажут что все там работает отлично, и убегут когда нужна будет их помощь (причем ничего после их советов и не заработает :-)))
поэтому и буду писать только для винды (для никсов просто не смогу проверить работу :-)))
аминь.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, наконец ))
*да я и не собираюсь спорить )))
VitGo
16.03.2016 19:48кстати про лазарус
пока никто ничего ответить не смог.: http://www.cyberforum.ru/lazarus/thread1686779.html#post8891492
вы на самом деле предлагаете на "этом" писать ?
p.s. все еще надеюсь что это не глюк а все таки неправильное с точки зрения фрипаскаля программирование… может быть что то еще вызывать нужно?twr
17.03.2016 09:25Наверное просто ребята что-то делают не так: https://ru.wikipedia.org/wiki/Lazarus#.D0.9F.D0.9E.2C_.D0.BD.D0.B0.D0.BF.D0.B8.D1.81.D0.B0.D0.BD.D0.BD.D0.BE.D0.B5_.D0.BD.D0.B0_Lazarus
VitGo
17.03.2016 10:43А по вопросу что можете сказать ?
Суть того что я написал в том, что не хочется заниматься изучением новой среды в которой полно недокументированных глюков — мало того сам не уверен в своих знаниях, так еще и глюки, такие как я описал выше, быстро собьют настрой вообще что либо писать...
причем этот глюк я нашел сам, буквально через 10 минут после того как поставил среду и начал пробовать в ней писать...twr
17.03.2016 13:41+1По вопросу могу сказать, что Вы снова игнорируете документацию и не пытаетесь разобраться в предмете самостоятельно, уповая на ответы с форумов. Поведение формы, описанное Вами, не есть глюк. Из документации:
TControl.Align Specifies the placement of the control inside its Parent.
Очевидно, что у формы верхнего уровня нет parent'а.VitGo
17.03.2016 13:46да, уже прочитал.
VaalKIA
17.03.2016 21:46Рекомендую форум http://delphikingdom.ru/, хотя вопросы там не быстро публикуются, особенно самый первый, но он и как база знаний хорош тоже.
quverty
17.03.2016 14:05И ещё там RichEdit нет. Для меня основной аргумент, что бесплатных версий Делфи нет давно, а бесплатные все с урезанной функциональностью.
Zapped
17.03.2016 15:37TRichMemo 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
насчёт его функциональности — не знаю, насколько она урезанаquverty
17.03.2016 16:32А он живой? Там 2009 и ссылка не работает. Я сейчас что-то смутно начал вспоминать, но он в любом случае в компонентах не присутствует и мне в свое время пришлось использовать SynEdit, установив его и на Дельфи. Проблема, что в Lazarus SynEdit свой, поддерживать два проекта параллельно стало неудобно.
quverty
17.03.2016 16:55Я имел в виду в стандартных компонентах предустановленных в Lazarus его нет. Но он вроде живой — как раз сегодня обновлён архив.
VitGo
17.03.2016 18:09ну в лазарусе есть synedit — по сравнению с ним richedit жалкая поделка :-)))
я потихоньку ковыряю лазарус — но пока в дельфи мне комфортнее...
кстати уже сделал описание основного набора команд для cortex-m4 в редакторе :-) теперь буду писать обработку инклудов
Zapped
15.03.2016 15:17тут по некоторым вопросам на дельфи форумах ответ не найти
ой ли?!
например?VitGo
15.03.2016 15:20как получить количество символов в RichEdit по горизонтали?
то есть например я знаю как узнать первую и последнюю показываемые строки. ну или как вариант узнать с какого по какой символ строки напечатан в окне редактора.?
а как тоже самое сделать с колонками ?
p.s. пока кроме как вычислять по ширине компонента в пикселах и ширине символа в пикселе (благо они у меня моноширинные предполагаются) ничего не придумал.Zapped
15.03.2016 15:34+1EM_CHARFROMPOS message?
N.B. RichEdit — виндовый контрол, TRichEdit — лишь обёртка
пример для TMemo
правильно сказал twr:Довольно странное решение начинать крупный проект на языке, который приходится изучать по ходу дела.
VitGo
16.03.2016 06:46проверил предложенное вами решение — это тоже костыль :-( потому что дает значение правой границы в зависимости от количества символов (уже набранных) в проверяемой строке…
в общем то мое решение проще.Alexeyslav
16.03.2016 17:37+1Там еще кстати есть ограничение на максимальную длину одной строки… тоже неприятно столкнулся с таким явлением. Вроде бы в этих контролах можно хранить не более 10К в одной строке, всё лишнее переносится на следующую… В программах вроде бы таких длинных строк не встречается, но кто знает...
Godless
15.03.2016 10:43Лучше IDE для ASM не видел.
Правда на чистом давно не писал, но все же...
PS: выше про SASM написали, пропустил обзор, вроде заслуживает внимания...
VitGo
15.03.2016 11:01+1АААА!!! я понял свою ошибку! я не написал что ассемблер для ARM (исправил в названии статьи)
я пишу среду для STM32 микроконтроллеров, в принципе подойдет и для других ARM 32bit…
про x86 я и не думаю даже :-)
hurricup
15.03.2016 11:03+2Прям сразу захотелось запилить плагинчик для IDEA
VitGo
15.03.2016 11:05+1перечень хотелок есть — ЗАПИЛИТЕ!!! :-)
hurricup
15.03.2016 11:14+3Через месяцок-два с перлом закончу, посмотрим. Сразу два не осилить :)
ну и хочется это здорово — вопрос насколько это востребовано и сложен синтаксис с учетом сахаров и мета-информации.
Но в целом считаю не очень разумным начинать с нуля. Всегда лучше делать под платформу, какая ближе по сердцу — вим/эклипс/идея
А так — львиная доля усилий уйдет на повторение того что уже сделали другие за много-много лет.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)hurricup
15.03.2016 11:27Если все можно описать с помощью BNF то вообще не проблема. Хотя после перла, мне кажется, трудно меня напугать уже каким-либо из реальных языков.
Ну если не востребованно — не очень интересно. Хотя, можно было бы запилить некую платформу для ассемблера, к которому можно было бы пилить микро-плагинчики для разных платформ.VitGo
15.03.2016 11:44конечно можно! иначе как бы компилятор разбирал :-)))
многие вещи по началу не востребованы… в настоящий момент среды для разработки программ на ассемблере для микроконтроллеров фактически нет.
есть просто использование стандартных сред (обычно си) для языка ассемблера. никто специфичные для ассемблера потребности не учитывает и не решает…
казалось бы мелочи:
- вести список локальных меток для быстрого к ним перехода — где вы это увидели у редакторов которые выше упомянули? (пусть даже под x86) — в лучшем случае у 1 или 2ух..
- вести список переменных для того чтобы вставлять их в программу
- разбирать синтаксис команд на этапе ввода (а не выдавать ошибки при компиляции)...
- про многооконность редактора я уже писал
и это самое простое что можно сделать!
пока же все редакторы ассемблера что есть это просто подсветка (простейшая) + компиляция (внешним компилятором) и у некоторых продвинутых — отладка (вот это конечно классная вещь).
В общем спорить не хочу. кто сталкивался — тот меня поймет, кто пишет на Си — тому конечно вся эта возня с ассемблером вообще не понятно — он привык в инлайн все команды размещать и не париться (потому что от силы размещает 50-80 команд)hurricup
15.03.2016 11:50+1Компилятор может как раз разбирать как угодно и ему bnf не нужен. А для IDEA, например, чтобы с минимальными затратами сделать языковое расширение нужен bnf.
Т.е. сделать можно все что угодно, вопрос трудозатрат.
Alexeyslav
15.03.2016 12:21Это, пожалуй, здорово. будет хоть одна среда под ассемблер не требующая для комфортной работу 8Гб оперативки из-за универсальности среды.
Пока для этих целей использую Notepad++ и под AVR, под STM32 его будет долго настраивать. Очень не хватает списка меток, и не просто меток а с классификацией меток на внутренние и метки начала подпрограмм. Внутренние они вобщем-то не очень актуальны в глобальной навигации, только если курсор находится внутри подпрограммы. А вот перечень подпрограмм очень нужен, с разбивкой по "модулям"-файлам с коментариями выполняемой функции и параметров. Отдельно список дефайнов и макросов...hurricup
15.03.2016 12:45Ну зачем же так передергивать? У меня идея с открытым не маленьким проектом занимает 1 гиг после 4 часов работы. С учетом того, что в основном она работает с моим личным не оптимальным (читай — кривым) плагином, который жрет в массе мест где этого можно не делать. И больше занимать уже не будет. Все расходы памяти и процессорного времени — плата за функционал.
Все что простое и позволяет лишь печатать — ничего не жрет и ничего не умеет. Чем больше умеет — тем больше жрет. Вполне логично.
Да, есть оверхед за счет универсальности, но количество разных плюшек из коробки, получаемое от существующих платформ компенсирует этот незначительный оверхед.
В общем случае, все написанное с нуля в качестве хобби функционально будет хуже чем то, чем много людей занимаются профессионально много лет. Да, если это интересно как процесс — велосипеды это отлично. Если речь о конечном продукте — нужно максимально реюзать то, что уже написано до тебя. Выражаясь словами классика: "Если я видел дальше других, то потому, что стоял на плечах гигантов"VitGo
15.03.2016 12:47+1я думаю что никто из за оперативки не переживает…
просто функциональность нужна, а ее в других средах нет...
а память — память это просто к слову прилось… в конце концов один раз разориться на 16 гигов и больше не думать об этом :-)hurricup
15.03.2016 12:55Ну и для асма все будет работать очень быстро и жрать мало в силу простоты и плоскости синтаксического дерева.
VitGo
15.03.2016 12:57ну это до тех пор пока не начнет инклуды отрабатывать и внешние метки проверять… — там то его дисковые операции и замедлят до среднестатистического :-)))
hurricup
15.03.2016 13:16Не скажу за другие платформы, но в IDEA это все отлично решено с помощью системы индексации. И в силу простоты синтаксиса тут будет все летать.
VitGo
15.03.2016 12:46вот вот… сразу видно коллегу по ассемблеру :-) тот кто пишет на других языках — нас не поймет :-)
что значит внутренние метки и метки начала подпрограмм? их как то выделить?
для внешних меток есть GLOBAL / EXTERN (несмотря на то что GNUAS не требует по EXTERN среда узнает что нужно проверить внешнюю метку)
или хочется сделать список меток именно подпрограмм? (тогда нужно договориться о каком то идентификаторе чтобы их в отдельный список автоматом среда собирала)Alexeyslav
15.03.2016 14:34Внутренние — это те что внутри подпрограмм и больше нигде не используются.
А метки подпрограмм — это метка с которой начинается код и заканчивается командой возврата из подпрограммы, все метки что находятся внутри этого блока — внутренние, и интереса в глобальном смысле не представляют, хоть для компилятора они все на одно лицо.
Gorthauer87
15.03.2016 14:20+1Qt Creator вполне неплохо справляется с asm файлами, умеет их даже отлаживать по шагам. Нет, конечно, всяких мелочей типа проверки корректности синтаксиса, да и всяких умных сниппетов, но не уверен, что это так часто уж нужно. На асме редко кто пишет больше 1000 строчек.
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.
VaalKIA
15.03.2016 23:20+1Попробуйте поспрашивать на ресурсе http://zx-pk.ru/forum.php, там любят ассемблеры, помниться Медноногов писал свой кроссассемблер, что бы написать ЧВ, и среди разработчиков как-то обсуждали трёхоконный редактор. Вообще, по части ассемблеров и какими они должны быть, что бы быть удобными, там должны знать и иметь практический опыт.
Ну и присодиняюсь к комментариям выше — используйте Лазарус, он во многом совместим с Дельфи.Alexeyslav
16.03.2016 17:39Но только не по человечности по отношению к программисту. В последний раз когда я его пробовал, он выдавал файлы по 10М на простейший проект и очень сильно затруднена отладка и интерпретация сообщений компилятора об ошибках. Что-то с тех пор изменилось?
quverty
17.03.2016 14:45По-моему ответ на первый вопрос уже чуть ли не прямо в readme при инсталляции выскакивает, настолько часто его задают. Мол чтобы избежать этого надо в параметрах проекта установить два флажка — символы отладки во внешний файл, удалять символы из исходника. Мне показалось, он за последние годы сильно улучшился, а размер файлов теперь и у Дельфи достаточно большой.
XanderBass
мой адрес электронной почты прежний. Глупый вопрос: а какой? А то если нужна помощь с сайтом, то могу помочь.
VitGo
гм. знает все у нас яндекс… :-)
кинул адрес в личку