Я всегда имел дело лишь с языками высокого уровня, такими как java, C++, Pascal, но захотелось большего и решил изучить ассемблер. Я привык пользоваться очень удобными средствами разработки для упомянутых выше языков высокого уровня, такими как Eclipse, Delphi, MS Visual Studio, C++ Builder. После того как я скачал masm v9 естественно никаких подобных средств я не обнаружил, процесс разработки превратился в ужас - я использовал редактор FAR-а для наборов текста, затем использовал ml и link с различными параметрами, вобщем очень долго и неудобно, отладчиком я вообще так и не сумел воспользоваться, пробовал использовать MASM32Editor, который идет в комплекте с masm-ом, но удобство набора текста также страдает, единственный плюс - хотя бы не нужно пользовать ml и link в ручную. Собственно вопрос к профессионалам: Какие средства разработки вы порекомендуете использовать для программирования на языке ассемблера? Редакторы, отладчики, другие программы, вобщем все то, что должно быть у настоящего разработчика на языке ассемблера.
Прочитай вот эту статью про IDEhttp://www.wasm.ru/article.php?article=ide Бесплатный RadAsm с кучей плагинов можно (с трудном) настроить так, что будет как BC++Builder (только сомневаюсь что это нужно).
Ассемблер любят за отсутствие удобств, поэтому привыкай, а если захотелось удосбств, то никто __asm {} не отменял.
Freepriman Ну и конечно есть надежда на будущее - некоторые работают над средствами разработки, так сказать. Вот я например, работаю над средством для FASM. MASM неудобен, по моему мнению. А в FASM-е, кстати, нет линкера - просто запускаешь компилятор и получаешь назад EXE файл (ну или DLL).
Спасибо всем откликнувшимся. Обязательно посмотрю упомянутые средства. Еще нашел asmplugin для Eclipse, не успел пока его посмотреть, потом напишу о его возможностях.
MASMBuilder - это средство разработки или я чего-то не понимаю ? Почему Ассемблер связывают с какими-то трудностями по части компиляции? За час можно посмотреть и откомпиллить несколько десятков программ.Основная трудность,как мне кажется - придумать что-то такое,до чего еще никто не додумался.Все остальные трудности- только видимость....
IceStudent Точно, планировалось. На мой взгляд FASM наиболее передовой ассемблер сейчас. В принципе, генератор кода сделан как Plug-In, так что кросс-ассемблерность возможна. Кроме того, IDE не загрузит уже написанный код. Ведь, для реализации ООП у меня получается некий более высокий язык - на один уровень выше ассемблера. Реализация ООП на макросах не выходит (или выходит, но очень громоздко и неудобно). Вот например, описание пары классов: Код (Text): class TObject : vtbl { ... virtual: OnDraw (EAX: hDC); ... } class Child : base TObject { data: Handle HWND; Path TCHAR [MAX_PATH]; callback: MsgMap (hWnd, uiMsg, wParam, lParam); method: foo1 (EDI: pstrKey, ESI: pHash); virtual: OnCmd (EDX: uiMenuItemID); override: OnDraw (EAX: hDC); } С такого описания генератор кода сделает нормальный ассемблерный код (структуры и проч.), который построится обычным ассемблером. Конечно, можно сгенерировать код на MASM, например, но если уже создавать новый код - не лучше ли использовать более передовой ассемблер? В будущем, конечно возможно написание генератора для MASM - интерфейс на Plug-In будет открыт. С таким подходом, невозможно поддерживать существующий код. Мне будет интересно услышать мнения по этому поводу: asmguru62@hotmail.com
Немного оффтоп, но не сильно. По почте обсуждение было бы не открытым. AsmGuru62 Но ведь это получится не просто IDE + "транслятор диалектов ассемблера" (если я правильно помню первоначальную идею кроссассемблерности этого IDE), а язык, в чём-то схожий на HLA Рэндалла Хайда. Отредактировано: конечно же, не компилятор - просто транслятор на ассемблер, как и HLA.
AsmGuru62 А сайт поддержки имеется с описанием всех фич? =) Просто тоже пишу свой IDE+компилятор. Только для паскаля. В плане IDE сделал есстественно подстветку синтаксиса; drop-down listbox с динамически-обновляемым списком процедур, функций, переменных, констант; smart tab. На этом моё воображение иссякло =) Интересует, что ты сделал для своего IDE, мож пойдёт и для паскаля.
n0name IDE не готов, так что на моём сайте (www.codexxi.com) нет ничего по этому поводу. А что, скажем, даст страница поддержки? Ну, понимаю, там можно обсуждать фичи... Я подумаю, может и добавлю что на сайте. Основное построение IDE такое: Главное окно - это контейнер, содержащий tabs: - работа с проектами (создание, ответвление, Backup/Restore и т.п.) - работа с исходным кодом активного проекта (набор классов, редактор, навигация, и т.п.) - работа с библиотекой классов (самое интересное - здесь!) - редактор ресурсов - Win32 API: здесь хранятся функции и модули, в которых эти функции содержатся. Отсюда генерируется таблица импорта. А также константы и структуры Win32. Была идея сделать Plug-In, чтобы tab мог содержать окно извне (класс окна сделан в DLL). Всё, что надо - это знать имя класса окна. Не знаю, надо ли это. И ещё одно интересное свойство: ничего не надо сохранять - всё сохранится в нужный момент. Есть команда "Save All" - если хочется быть уверенным. IceStudent Да, пожалуй, что-то похожее на HLA. Хотя Хайд, по моему, перегнул немного - не надо было превращать простую инструкцию в подобие функции (так кажется у него сделано): Код (Text): Mov (eax, ebx); По моему надо оставить код самой функции как он есть (с небольшими поправками): Код (Text): method THeap.Allocate (EAX: nBytes) { locals (clear) { Var1 UINT; Var2 HANDLE; } mov eax, 32 mov loc.Var1, eax ... mov ecx, nBytes invoke api.HeapAlloc (this.HeapHandle, 1, ecx) ... } Все эти "api.", "loc.", "this." и т.п. будут заменены генератором кода. Например: - "api." и скобки при HeapAlloc будут убраны вообще - "this.HeapHandle" заменяется на "[ebx + THeap.HeapHandle]" - "loc.Var1" заменяетя на "[esp + <calculated offset of 'Var1'>]" "clear" в "locals" (необязательный параметр) означает после резервирования очистить локальные переменные нулями. Ну и тому подобное. Префиксы хороши тем, что очень легко делать Auto-Complete. Да и читать код легче. В общем компилятором я бы это не назвал. Компилятор посложнее.
Хм, я делал табы только для файлов проекта, остальное всё находиться в Project Settings. Я не планирую подключать поддержку ООП. А не лучше ли сделать парсинг исходников(ты же его всё равно делаешь =)) и создавать список WinAPI динамически? ИМХО в плане юзабилити это удобнее чем доьавлять вручную. Хотя возможно я не так понял идею. То есть каждый раз при изменении исходника он сохраняется? Не слишком ли накладно?
imho, достаточно перед сборкой и при закрытии. Ну и если система и питание нестабильны - можно ещё периодическое автосохранение.
У меня проект сохраняется сразу же после редактирования настроек, а сорцы просто так не сохраняю. Перед выходом запрашиваю об сохранении, имхо так лучше всего, ну или автосохранение с резервной копией, мало ли что ты там сохранил.