вопросы по синтаксису fasm

Тема в разделе "WASM.BEGINNERS", создана пользователем cruzadrn, 7 янв 2011.

  1. cruzadrn

    cruzadrn New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2011
    Сообщения:
    7
    начал изучать fasm несколько дней назад, переделываю примеры из уроков Iczelion'а
    несколько вопросов возникло:

    1. как свою процедуру вызывать через invoke, пока получается только через stdcall
    stdcall WinMain, hInstance, NULL, CommandLine, SW_SHOWDEFAULT
    как сделать
    invoke WinMain, hInstance, NULL, CommandLine, SW_SHOWDEFAULT

    2. как в процедуре определять локальные переменные - структуры
    у меня получается только глобальными в разделе .data
    как сделать
    proc WndProc,hWnd,uMsg,wParam,lParam
    local ps:PAINTSTRUCT
    endp

    3. как определить размер структуры (аналог masm sizeof)?
    как сделать
    mov [wc.cbSize],SIZEOF WNDCLASSEX
     
  2. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.615
    Адрес:
    Russia
    cruzadrn
    call procname
     
  3. cruzadrn

    cruzadrn New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2011
    Сообщения:
    7
    lesson.asm [21]:
    call WinMain, hInstance, NULL, CommandLine, SW_SHOWDEFAULT
    error: extra characters on line.

    через call это понятно, но это надо пушить параметры вручную, а хотелось бы сократить текст
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    так и задумывалось, чтоб отличать вызовы своих процедур
     
  5. cruzadrn

    cruzadrn New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2011
    Сообщения:
    7
    это понял, а по 2 и 3 вопросу?
     
  6. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    1: локальные функции invoke-ать нельзя. А вот stdcall можно использовать и для вызова API. invoke вообще противоречит концепции квадратных скобок в фасме ;)
    2: после proc
    locals
    ps PAINTSTRUCT
    endl
    3: sizeof.WNDCLASSEX
    И читать мануал…
     
  7. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    2. Компилится без проблем

    Код (Text):
    1. proc test_proc
    2.   local ps:PAINTSTRUCT
    3. endp
    3.
    Код (Text):
    1. sizeof.WNDCLASSEX
     
  8. cruzadrn

    cruzadrn New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2011
    Сообщения:
    7
    спасибо всем
    n0name, я немного неточен был во 2 вопросе, при 1 локальной переменной компиляция проходит, если несколько - начинает ругаться
     
  9. KIV

    KIV Member

    Публикаций:
    0
    Регистрация:
    16 июл 2009
    Сообщения:
    231
    локальные переменные надеюсь перечисляешь через запятую?
    Код (Text):
    1. local a:POINT,b:POINT,c:DWORD
    в крайнем случае можно попробовать:
    Код (Text):
    1. locals
    2.   a POINT
    3.   b POINT
    4.   c dd ?
    5. endl
    invoke name = stdcall [name]
    то есть вызов функции не по метке, а по указателю. то есть косвенный вызов.
    так надо вызывать функции импортируемые из других DLL.
    свои же функции надо делать stdcall.
     
  10. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.708
    Так для проверки, ну или для опыта -- уроки Iczelion'а переписанные на Fasm на этом сайте часть 1-ая, часть 2-ая, часть 3-ья, папка Images
     
  11. cruzadrn

    cruzadrn New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2011
    Сообщения:
    7
    а как получить адрес в стеке?
    аналог из масм

    FindEXE proc Dir:lol: WORD, Mask2:lol: WORD
    ...
    LOCAL Path[1000]:BYTE
    ...
    lea edi,Path

    в фасм пытаюсь сделать следующее
    locals
    Find WIN32_FIND_DATA
    path db 1000 dup ?
    hFile dd ?
    endl
    ...
    lea edi, path

    получаю
    kernel32.asm [213]:
    lea edi, path
    error: invalid operand.
     
  12. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    lea edi,[path]