Проблемка: WatcomC + NASM -> WatcomC + FASM

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

  1. pyrodex

    pyrodex Павлик

    Публикаций:
    0
    Регистрация:
    21 авг 2008
    Сообщения:
    25
    здрасти

    От нечего делать захотелось поюзать fasm ибо очень уж его нахваливают.
    Итак проблемка:

    код на NASM:
    Код (Text):
    1.                 group dgroup _data _bss
    2.                 section _text class=code use32
    3.  
    4.                 global Init
    5.  
    6. Init                    cli
    7.                 pusha
    8.  
    9. ;                               ..... некоторый код
    10.    
    11.                 popa
    12.                 sti
    13.                 ret
    14.  
    15.  
    16. Interrupt           pusha
    17.                 push ds
    18.                 push es
    19.                 mov ax,dgroup
    20.                 mov ds,ax
    21.                 mov es,ax
    22.  
    23. ;                               ..... некоторый код
    24.  
    25.                 pop es
    26.                 pop ds
    27.                 popa
    28.                 iret
    29.  
    30.                 section _data class=data use32
    31.  
    32. ;                               ..... некоторые данные
    33.            
    34.  
    35.                 section _bss class=bss use32
    36.  
    37. ;                               ..... некоторые данные
    Из сишника (Watcom) вызывается Init(), устанавливающая некий вектор прерывания.
    Используется OS DOS.
    Вопрос: как тоже самое переписать на FASM?
     
  2. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
    Руководство к FASM на русском:
    http://wasm.ru/baixado.php?mode=doc&id=133

    ; генерация кода в режимах:
    use16
    lodsw
    use32
    lodsd
    use64
    lodsq
    use16
    ...

    Имя метки должно завершать двоеточие:
    label1:
    jmp label1

    Там много заморочек синтаксиса, смотрите справку.
     
  3. pyrodex

    pyrodex Павлик

    Публикаций:
    0
    Регистрация:
    21 авг 2008
    Сообщения:
    25
    меня больше интересует место где идет инициализация сегментных регистров.
    в справке я не нашел ответа, поэтому и написал на форуме.
     
  4. pyrodex

    pyrodex Павлик

    Публикаций:
    0
    Регистрация:
    21 авг 2008
    Сообщения:
    25
    забыл сказать - используется защищенный режим (расширитель pmodew)
     
  5. PowerASM

    PowerASM New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2010
    Сообщения:
    59
    Код (Text):
    1. ;NASM                                                             FASM
    2. group dgroup _data _bss
    3. section _text class=code use32                            segment _text use32
    4.  
    5. global Init
    6.  
    7. Init cli                                                              Init: cli
    8.      pusha                                                                pusha
    9.  
    10. ;                               ..... некоторый код
    11.    
    12.      popa                                                                 popa
    13.      sti                                                                    sti
    14.      ret                                                                    ret
    15.  
    16.  
    17. Interrupt pusha                                                        Interrupt: pusha
    18.              push ds                                                                   push ds
    19.              push es                                                                   push es
    20.              mov ax,dgroup                                                          mov ax,_text
    21.              mov ds,ax                                                                mov ds,ax
    22.              mov es,ax                                                                mov es,ax
    23.  
    24. ;                               ..... некоторый код
    25.  
    26.              pop es                                                                     pop es
    27.              pop ds                                                                     pop ds
    28.              popa                                                                       popa
    29.              iret                                                                         iret
    30.  
    31.              section _data class=data use32                            segment _data use32
    32.  
    33. ;                               ..... некоторые данные
    34.            
    35.  
    36.              section _bss class=bss use32                               segment _bss use32
    37.  
    38. ;                               ..... некоторые данные
     
  6. PowerASM

    PowerASM New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2010
    Сообщения:
    59
    ну вот. все съехало. а так долго выравнивал!
     
  7. pyrodex

    pyrodex Павлик

    Публикаций:
    0
    Регистрация:
    21 авг 2008
    Сообщения:
    25
    PowerASM
    думаю это компилица не будет)
    вы пробовали откомпилить?
     
  8. pyrodex

    pyrodex Павлик

    Публикаций:
    0
    Регистрация:
    21 авг 2008
    Сообщения:
    25
    знатоков фасма нет чтоли? или это переписать с насма на фасм нельзя?
     
  9. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    pyrodex, ну если захотелось поюзать fasm, юзайте, в чём проблема то?
     
  10. pyrodex

    pyrodex Павлик

    Публикаций:
    0
    Регистрация:
    21 авг 2008
    Сообщения:
    25
    litrovith
    см.выше.
     
  11. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Мысли его бегали и путались :)
    Разве знатоки fasm обязаны знать nasm? Разве они обязаны вам что-то компилить?
     
  12. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Мы не видим вверху проблем. Там есть только исходник.
    Ну разве проблемы форматирования? Так нормальный код, нормально выглядит. Зачем вы его форматировали - должно быть одинакое число пробелов, а не одинаковая позиция в вашем "кривом" шрифте.
     
  13. pyrodex

    pyrodex Павлик

    Публикаций:
    0
    Регистрация:
    21 авг 2008
    Сообщения:
    25
    valterg
    я так понимаю вникать в суть вопросы вам не надо. лишь бы запостить чтонибудь.
    если вам не понятна о чем речь, то попытаюсь сформулировать по другому: Как подружить WatomcC и FASM?
    Задача:
    Вызов внешней функции Init(), которая написана на фасме, из сишника.
    Ф-я Init реализована на фасме, которая устанавливает обработчик прерывания.
    Код прерывания использует данные объявленные в секции data и bss.
    Надеюсь понятно объяснил.
     
  14. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    pyrodex, http://www.wasm.ru/forum/viewtopic.php?id=35880
     
  15. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    pyrodex
    кампэц..
    компилите фасмом в кофф. при этом экспортируете нужные вам функи мангля их имена по ваткомовски. те для С функций подчеркивание добавляя после имени. для остальных форматов - смотрите хэлпник.
    или переименовав их в линкере с помощью алиасов
    или уточнив способ мангла в С(++) файлах

    ну и линкуете

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

    pyrodex Павлик

    Публикаций:
    0
    Регистрация:
    21 авг 2008
    Сообщения:
    25
    _basmp_
    )) смешные вы люди. ну да ладно.
    еще раз объясняю узкое место.
    В коде специально есть обработчик прерывания, если вы конечно обратили внимание, и в этом обработчике установка регистров ds es. Вот как это сделать на фасме.
    у Вас такой большой пост, вместо него можно было бы просто написать небольшой кусочек кода, а не указывать, что где и как объявлять. я Вам привел пример как сделано на насме. Будьте добры без лишних указания приведите такой же пример на фасме.
    спасибо.
     
  17. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    pyrodex, так вам ответили ведь в #5, нет?
     
  18. pyrodex

    pyrodex Павлик

    Публикаций:
    0
    Регистрация:
    21 авг 2008
    Сообщения:
    25
    iZzz32
    нет. это код не компилируется и не корректен (имеет недочёты)
    директива segment может использоваться только с format MZ. Директивы fromat mz в примере нет вообще.
    так же нет директивы public (с format mz выдаст ошибку при компиляции)
     
  19. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    pyrodex, прочитал всю тему. Никак) Возвращайтесь в насм или пишите Init на ассемблере.
     
  20. pyrodex

    pyrodex Павлик

    Публикаций:
    0
    Регистрация:
    21 авг 2008
    Сообщения:
    25
    iZzz32
    это что шутка такая? ) никак.