fasm и proc64?

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

  1. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    не могу разобраться как пользоваться proc64.inc.
    просто создать процедуру и вызвать ее я могу.
    а если я пытаюсь передать параметры или описать процедуру с параметрами, то у меня возникают ошибки.
    proc64.inc я использую не для виндовс, а для своей проги, но вазници быть не должно, ведь это просто соглашение вызовов.
    покажите пример или обьясните подробно как пользоваться этими макросами и что они делают.
    желательно рабочие примеры, не для виндовс. а для отдельной программы типа:
    invoke XXX

    proc XXX
    endp

    только чтоб работало, а то у меня все время ошибки, или это fasm глючит или надо какие параметры при компиляции указывать?
     
  2. Dr.Golova

    Dr.Golova New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2002
    Сообщения:
    348
    "но вазници" вполне могут возникнуть, если стэк не выровнянный до 16 байт, или если не зарезервированно место под 4 перемнных. даже не под виндовс это имеет значение. так что "вазница" есть, просто надо конкретнее описывать ситуацию =)
     
  3. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    то есть надо попробывать выровнять стек? а под 4 аргумента я и так резервирую как в примере виндовс.
    но причем тут ошибка при компиляции, fasm что проверяет значения в стеке когда компилирует?
     
  4. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    abcd008, мануалы читать надо. Для прямых вызовов – fastcall, а не invoke.

     
  5. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    я читал и понял что они одинаково работают. наверно был не прав.
    у меня с английским плохо.
    может в кратце обьяснишь, а то я не все понял, особенно про локальные переменные
     
  6. newbie

    newbie New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2008
    Сообщения:
    1.246
    как это одинаково еслит в мане написано что fastcall вызывает процедуру напряму, а invoke не напрямую?
     
  7. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    я же написал был не прав, и плохо дружу с англ
     
  8. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    изменил invoke на fastcall. а ошибка осталась та же.

    в чем ошибка ??


    fastcall mem pp1
    ret

    pp1 dq ?

    proc mem
    ret
    endp
     
  9. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    Видимо, fastcall mem,pp1 и proc mem arg1
     
  10. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
    Наверно запятую не поставил fastcall mem pp1 должно быть так fastcall mem,pp1


    И вместо не прямой вызов, обычно говорят косвеный.
     
  11. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    но в примерах fasm for windows64 исходники без запятых
     
  12. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    abcd008, пример исходника без запятых, пожалуйста?
     
  13. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    дя я не увидел. запидая должна быть.
    объясните что делает эта программа
    hwnd,wmsg,wparam,lparam-это 1-4 или 4-... параметр???
    если это 1-4 то что тогда он делает?

    proc WindowProc hwnd,wmsg,wparam,lparam
    mov [hwnd],rcx
    mov [wmsg],edx
    mov [wparam],r8
    mov [lparam],r9
     
  14. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    а есть какой-нибудь дебагер 64 битный, чтоб проверить во что превратятся эти макросы
     
  15. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    abcd008, 1-4. Это fastcall. Первые 4 аргумента передаются в регистрах, но стек резервируется под них резервируется. Чтобы пользоваться регистрами внутри функции для других целей и не потерять значения аргументов, их можно сохранить туда, где им и положено быть. Чтобы посмотреть, во что развернутся макросы, есть prepsrc в ./tools/, но это не совсем удобно. Можно посмотреть на fdbg.
     
  16. newbie

    newbie New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2008
    Сообщения:
    1.246
    резервируется резервируется резервируется. точно резервируется :lol: