Средства разработки в masm v9

Тема в разделе "WASM.BEGINNERS", создана пользователем Freepriman, 3 янв 2007.

  1. Freepriman

    Freepriman New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2006
    Сообщения:
    5
    Я всегда имел дело лишь с языками высокого уровня, такими как java, C++, Pascal, но захотелось большего и решил изучить ассемблер. Я привык пользоваться очень удобными средствами разработки для упомянутых выше языков высокого уровня, такими как Eclipse, Delphi, MS Visual Studio, C++ Builder. После того как я скачал masm v9 естественно никаких подобных средств я не обнаружил, процесс разработки превратился в ужас - я использовал редактор FAR-а для наборов текста, затем использовал ml и link с различными параметрами, вобщем очень долго и неудобно, отладчиком я вообще так и не сумел воспользоваться, пробовал использовать MASM32Editor, который идет в комплекте с masm-ом, но удобство набора текста также страдает, единственный плюс - хотя бы не нужно пользовать ml и link в ручную.

    Собственно вопрос к профессионалам:

    Какие средства разработки вы порекомендуете использовать для программирования на языке ассемблера? Редакторы, отладчики, другие программы, вобщем все то, что должно быть у настоящего разработчика на языке ассемблера.
     
  2. atorn

    atorn New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2006
    Сообщения:
    64
    Прочитай вот эту статью про IDEhttp://www.wasm.ru/article.php?article=ide
    Бесплатный RadAsm с кучей плагинов можно (с трудном) настроить так, что будет как BC++Builder (только сомневаюсь что это нужно).
     
  3. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    Ассемблер любят за отсутствие удобств, поэтому привыкай, а если захотелось удосбств, то никто __asm {} не отменял.
     
  4. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Freepriman
    Ну и конечно есть надежда на будущее - некоторые работают над средствами разработки, так сказать. Вот я например, работаю над средством для FASM. MASM неудобен, по моему мнению. А в FASM-е, кстати, нет линкера - просто запускаешь компилятор и получаешь назад EXE файл (ну или DLL).
     
  5. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    AsmGuru62
    Оффтоп, но
    Изначально IDE планировалось разве не кросс-ассемблерным?
     
  6. Freepriman

    Freepriman New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2006
    Сообщения:
    5
    Спасибо всем откликнувшимся. Обязательно посмотрю упомянутые средства. Еще нашел asmplugin для Eclipse, не успел пока его посмотреть, потом напишу о его возможностях.
     
  7. Veter

    Veter New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2006
    Сообщения:
    161
    MASMBuilder - это средство разработки или я чего-то не понимаю ?
    Почему Ассемблер связывают с какими-то трудностями по части компиляции? За час можно посмотреть и откомпиллить несколько десятков программ.Основная трудность,как мне кажется - придумать что-то такое,до чего еще никто не додумался.Все остальные трудности- только видимость....
     
  8. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    IceStudent
    Точно, планировалось.

    На мой взгляд FASM наиболее передовой ассемблер сейчас.
    В принципе, генератор кода сделан как Plug-In, так что кросс-ассемблерность возможна.

    Кроме того, IDE не загрузит уже написанный код. Ведь, для реализации ООП у меня
    получается некий более высокий язык - на один уровень выше ассемблера. Реализация ООП
    на макросах не выходит (или выходит, но очень громоздко и неудобно).

    Вот например, описание пары классов:
    Код (Text):
    1. class TObject : vtbl
    2. {
    3.     ...
    4.  
    5.     virtual:
    6.         OnDraw (EAX: hDC);
    7.     ...
    8. }
    9.  
    10. class Child : base TObject
    11. {
    12.     data:
    13.         Handle HWND;
    14.         Path TCHAR [MAX_PATH];
    15.  
    16.     callback:
    17.         MsgMap (hWnd, uiMsg, wParam, lParam);
    18.  
    19.     method:
    20.         foo1 (EDI: pstrKey, ESI: pHash);
    21.  
    22.     virtual:
    23.         OnCmd (EDX: uiMenuItemID);
    24.  
    25.     override:
    26.         OnDraw (EAX: hDC);
    27. }
    С такого описания генератор кода сделает нормальный ассемблерный код (структуры и проч.),
    который построится обычным ассемблером. Конечно, можно сгенерировать код на MASM, например, но
    если уже создавать новый код - не лучше ли использовать более передовой ассемблер?

    В будущем, конечно возможно написание генератора для MASM - интерфейс на Plug-In будет открыт.

    С таким подходом, невозможно поддерживать существующий код.
    Мне будет интересно услышать мнения по этому поводу: asmguru62@hotmail.com
     
  9. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Немного оффтоп, но не сильно. По почте обсуждение было бы не открытым.

    AsmGuru62
    Но ведь это получится не просто IDE + "транслятор диалектов ассемблера" (если я правильно помню первоначальную идею кроссассемблерности этого IDE), а язык, в чём-то схожий на HLA Рэндалла Хайда.

    Отредактировано: конечно же, не компилятор - просто транслятор на ассемблер, как и HLA.
     
  10. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    AsmGuru62
    А сайт поддержки имеется с описанием всех фич? =)
    Просто тоже пишу свой IDE+компилятор. Только для паскаля.
    В плане IDE сделал есстественно подстветку синтаксиса; drop-down listbox с динамически-обновляемым списком процедур, функций, переменных, констант; smart tab. На этом моё воображение иссякло =) Интересует, что ты сделал для своего IDE, мож пойдёт и для паскаля.
     
  11. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    n0name
    IDE не готов, так что на моём сайте (www.codexxi.com) нет ничего по этому поводу. А что, скажем, даст страница поддержки? Ну, понимаю, там можно обсуждать фичи... Я подумаю, может и добавлю что на сайте.

    Основное построение IDE такое:

    Главное окно - это контейнер, содержащий tabs:
    - работа с проектами (создание, ответвление, Backup/Restore и т.п.)
    - работа с исходным кодом активного проекта (набор классов, редактор, навигация, и т.п.)
    - работа с библиотекой классов (самое интересное - здесь!)
    - редактор ресурсов
    - Win32 API: здесь хранятся функции и модули, в которых эти функции содержатся. Отсюда генерируется таблица импорта. А также константы и структуры Win32.

    Была идея сделать Plug-In, чтобы tab мог содержать окно извне (класс окна сделан в DLL). Всё, что надо - это знать имя класса окна. Не знаю, надо ли это.

    И ещё одно интересное свойство: ничего не надо сохранять - всё сохранится в нужный момент. Есть команда "Save All" - если хочется быть уверенным.

    IceStudent
    Да, пожалуй, что-то похожее на HLA. Хотя Хайд, по моему, перегнул немного - не надо было превращать простую инструкцию в подобие функции (так кажется у него сделано):
    Код (Text):
    1. Mov (eax, ebx);
    По моему надо оставить код самой функции как он есть (с небольшими поправками):
    Код (Text):
    1. method THeap.Allocate (EAX: nBytes)
    2. {
    3.     locals (clear)
    4.     {
    5.         Var1 UINT;
    6.         Var2 HANDLE;
    7.     }
    8.  
    9.     mov eax, 32
    10.     mov loc.Var1, eax
    11.     ...
    12.     mov ecx, nBytes
    13.     invoke  api.HeapAlloc (this.HeapHandle, 1, ecx)
    14.     ...
    15. }
    Все эти "api.", "loc.", "this." и т.п. будут заменены генератором кода. Например:
    - "api." и скобки при HeapAlloc будут убраны вообще
    - "this.HeapHandle" заменяется на "[ebx + THeap.HeapHandle]"
    - "loc.Var1" заменяетя на "[esp + <calculated offset of 'Var1'>]"

    "clear" в "locals" (необязательный параметр) означает после резервирования очистить локальные переменные нулями.

    Ну и тому подобное.
    Префиксы хороши тем, что очень легко делать Auto-Complete. Да и читать код легче.
    В общем компилятором я бы это не назвал. Компилятор посложнее.
     
  12. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Да, я ошибся - исправил.
     
  13. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Хм, я делал табы только для файлов проекта, остальное всё находиться в Project Settings. Я не планирую подключать поддержку ООП.
    А не лучше ли сделать парсинг исходников(ты же его всё равно делаешь =)) и создавать список WinAPI динамически? ИМХО в плане юзабилити это удобнее чем доьавлять вручную. Хотя возможно я не так понял идею.
    То есть каждый раз при изменении исходника он сохраняется? Не слишком ли накладно?
     
  14. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    imho, достаточно перед сборкой и при закрытии. Ну и если система и питание нестабильны - можно ещё периодическое автосохранение.
     
  15. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    У меня проект сохраняется сразу же после редактирования настроек, а сорцы просто так не сохраняю. Перед выходом запрашиваю об сохранении, имхо так лучше всего, ну или автосохранение с резервной копией, мало ли что ты там сохранил.