не могу разобраться как пользоваться proc64.inc. просто создать процедуру и вызвать ее я могу. а если я пытаюсь передать параметры или описать процедуру с параметрами, то у меня возникают ошибки. proc64.inc я использую не для виндовс, а для своей проги, но вазници быть не должно, ведь это просто соглашение вызовов. покажите пример или обьясните подробно как пользоваться этими макросами и что они делают. желательно рабочие примеры, не для виндовс. а для отдельной программы типа: invoke XXX proc XXX endp только чтоб работало, а то у меня все время ошибки, или это fasm глючит или надо какие параметры при компиляции указывать?
"но вазници" вполне могут возникнуть, если стэк не выровнянный до 16 байт, или если не зарезервированно место под 4 перемнных. даже не под виндовс это имеет значение. так что "вазница" есть, просто надо конкретнее описывать ситуацию =)
то есть надо попробывать выровнять стек? а под 4 аргумента я и так резервирую как в примере виндовс. но причем тут ошибка при компиляции, fasm что проверяет значения в стеке когда компилирует?
я читал и понял что они одинаково работают. наверно был не прав. у меня с английским плохо. может в кратце обьяснишь, а то я не все понял, особенно про локальные переменные
как это одинаково еслит в мане написано что fastcall вызывает процедуру напряму, а invoke не напрямую?
изменил invoke на fastcall. а ошибка осталась та же. в чем ошибка ?? fastcall mem pp1 ret pp1 dq ? proc mem ret endp
Наверно запятую не поставил fastcall mem pp1 должно быть так fastcall mem,pp1 И вместо не прямой вызов, обычно говорят косвеный.
дя я не увидел. запидая должна быть. объясните что делает эта программа 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
abcd008, 1-4. Это fastcall. Первые 4 аргумента передаются в регистрах, но стек резервируется под них резервируется. Чтобы пользоваться регистрами внутри функции для других целей и не потерять значения аргументов, их можно сохранить туда, где им и положено быть. Чтобы посмотреть, во что развернутся макросы, есть prepsrc в ./tools/, но это не совсем удобно. Можно посмотреть на fdbg.