Миграция с TASM/MASM на JWASM

Тема в разделе "WASM.ASSEMBLER", создана пользователем Ykidia, 20 май 2010.

  1. Ykidia

    Ykidia Member

    Публикаций:
    0
    Регистрация:
    21 июн 2005
    Сообщения:
    99
    Адрес:
    Санкт-Петербург
    Возможна ли такая миграция более или менее быстро и безболезненно?
    А то на главной странице JWASM заявлено (ну как обычно это делается), что мы все такие крутые, замена тому, сему, и еще дополнительные фичи.
    Пытаюсь компилить исходники, написанные для TASM в режиме совместимости с MASM, и в итоге получаю кучу ошибок, к примеру, не нравится JWASM'у слово global. Ладно, заремил все global'ы, добавил опцию в командной строке -Zf (maske all symbols public), компилю снова - теперь ему не нравится объявление структур...
    2 вопроса, кто сталкивался,
    1) возможно ли написание кода так, чтобы компилилось и в TASM, и в JWASM (для отладочных целей на первое время)?
    2) стоит ли вообще овчинка выделки, или придется перепахивать весь код, чтобы JWASM нормально все захавал (и высрал что надо)?
     
  2. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    Ykidia
    У Пирогова в "Assembler для Windows" видел примеры написания исходников, которые могут одновременно компилироваться и Tasm'ом и masm'ом. Хотя masm и tasm совместимы но там тоже по разному описываются структуры, описание "шапки" процедуры и т.п.
     
  3. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    в принципе, вы можете перейти сразу на васм. минуя жвасм. синтаксис у него не сильно от масма отличается. если чтото не понравится сильно, так можно и до/переписать. он опенсорсный. ватком рантайм и куски от других частей написаны на нем, так что асм вполне рабочий. ну итд.
     
  4. Ykidia

    Ykidia Member

    Публикаций:
    0
    Регистрация:
    21 июн 2005
    Сообщения:
    99
    Адрес:
    Санкт-Петербург
    Mikl___
    Речь не о "TASM" vs. "MASM", а о "TASM в режиме совместимости с MASM плюс собственные расширения" vs. "JWASM".

    qqwe
    Я хотел как раз перейти на JWASM, ибо, как понял, он более продвинутый, нежели WASM, к тому же JWASM местами понимает текст для "TASM в режиме совместимости с MASM".

    На данный момент, т.к. все global'ы собраны у меня в кучу в одном файле, я сделал следующее:
    1. В начале этого файла для JWASM'а вставил строки:
    Код (Text):
    1. ifdef __JWASM__
    2. option renamekeyword:<externdef>,global
    3. endif
    externdef - аналог TASM'овского global, а option renamekeyword просто переименовывает externdef на global.
    2. Добавил имена структур перед ends каждой структуры; TASM'у пофиг (что есть, что нет), а JWASM'у нужно, чтобы было.
    3. Но пока не придумал (а разработчик еще не ответил), как обойти использование label в объявлениях структур, например:
    Код (Text):
    1. ; PUSHAD Workspace
    2. PADWS               struc
    3. padws_begin = $
    4. PADrEDIbytes        label   byte
    5. PADrEDI             label   dword
    6. PADrDI              dw      ?
    7.                     dw      ?
    8. PADrESIbytes        label   byte
    9. PADrESI             label   dword
    10. PADrSI              dw      ?
    11.                     dw      ?
    12. PADrEBPbytes        label   byte
    13. PADrEBP             label   dword
    14. PADrBP              dw      ?
    15.                     dw      ?
    16. PADrESPbytes        label   byte
    17. PADrESP             label   dword
    18. PADrSP              dw      ?
    19.                     dw      ?
    20. PADrEBXbytes        label   byte
    21. PADrEBX             label   dword
    22. PADrBX              label   word
    23. PADrBL              db      ?
    24. PADrBH              db      ?
    25.                     dw      ?
    26. PADrEDXbytes        label   byte
    27. PADrEDX             label   dword
    28. PADrDX              label   word
    29. PADrDL              db      ?
    30. PADrDH              db      ?
    31.                     dw      ?
    32. PADrECXbytes        label   byte
    33. PADrECX             label   dword
    34. PADrCX              label   word
    35. PADrCL              db      ?
    36. PADrCH              db      ?
    37.                     dw      ?
    38. PADrEAXbytes        label   byte
    39. PADrEAX             label   dword
    40. PADrAX              label   word
    41. PADrAL              db      ?
    42. PADrAH              db      ?
    43.                     dw      ?
    44. padws_size = $ - PADrEDI
    45. PADWS               ends
    JWASM ругается, мол, неверное применение label.
     
  5. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    Ykidia
    Так и я написал не о "TASM" vs. "MASM", а о том, где видел "примеры написания исходников, которые могут одновременно компилироваться" двумя разными ассемблерами, в вашем случае это будут TASM и JWASM, просто нужно желание и терпение
     
  6. Ykidia

    Ykidia Member

    Публикаций:
    0
    Регистрация:
    21 июн 2005
    Сообщения:
    99
    Адрес:
    Санкт-Петербург
    Внезапно, наткнулся на свой антиквариат. Решил немного отвлечься, подправил пару-тройку файлов... под UASM. (Не разобрался еще как переименовать тему).
    Ладно, этот тупица не понимает множественных push и pop (как было привычно в TASM). Фиг с ним, наплодил везде где надо.
    Но вот не пойму, какого черта эта... этот компилятор не понимает размерности члена структуры, описанной накануне, где, естественно, размерность этого члена (и всех остальных) явно указана!
    В коде:
    Код (Text):
    1.  
    2. GKIDWS          struc
    3. gkidws_begin = $
    4. GKIDTmpregESI   dd      ?
    5. GKIDTmpregEBX   dd      ?
    6. GKIDSymbolCnr   dd      ?
    7. GKIDKeywordID   dd      ?
    8. GKIDKeywordLen  dd      ?
    9. GKIDSymbolPtr   dd      ?
    10. GKIDTemplatePtr dd      ?
    11. GKIDTemplates   dd      00100h - (GKIDTemplates - gkidws_begin) dup(?)
    12. gkidws_tmplts_size = $ - GKIDTemplates
    13. gkidws_size = $ - GKIDTmpregESI
    14. GKIDWS          ends
    И чуть далее:
    Код (Text):
    1. inc     [esp].GKIDSymbolCnr
    Что же сообщает мне эта параша?
    Код (Text):
    1. Error A2183: Instruction operand must have size
    Видно, я что-то не так делаю, offset он из структуры берет, а размерность нет. Есть способ заставить его понимать размерность? Может, надо как-то по-другому объявлять? А то очень неприятно "прибивать гвоздями" одни и те же очевидные вещи в разных местах...
    Спасибо.
     
  7. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
  8. vitokop

    vitokop Member

    Публикаций:
    0
    Регистрация:
    20 май 2006
    Сообщения:
    48
    хм...

    inc dword ptr [esp].GKIDSymbolCnr
     
  9. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    600
    На счёт UASM. Я использую версию 2.46.10.0, есть более новая версия, но он у меня не компилирует мой проект XRayExtensions 2, какая-то ошибка вылазит. Так что приходится использовать более старую версию. Вероятно в процессе рефакторинга кучу ошибок занесли, бывает.
    И да, UASM не полностью совместим с МАСМом.
     
  10. Ykidia

    Ykidia Member

    Публикаций:
    0
    Регистрация:
    21 июн 2005
    Сообщения:
    99
    Адрес:
    Санкт-Петербург
    Как раз такая "доработка" и не устраивает. Как предлагает Mikl___, обращусь таки к разработчикам.
     
  11. vitokop

    vitokop Member

    Публикаций:
    0
    Регистрация:
    20 май 2006
    Сообщения:
    48
    Ykidia,
    разработчики всегда будут правы
    как реализована inc dword ptr [esp].GKIDSymbolCnr в UASM ?
    извлекается указатель dword ptr - другого и не может быть в 32 (обобщенный указатель )
    а вот потом манипуляции с ним - это дело и право разработчиков UASM
    по обработке структуры GKIDWS (как они реализуют)
    см. дизасм. код
    типа того для данного случая

    8B0424 mov eax, [esp]
    FF4008 inc dword ptr [eax+8]

    или
    FF442408 inc dword ptr [esp+8]

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