начал изучать 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
lesson.asm [21]: call WinMain, hInstance, NULL, CommandLine, SW_SHOWDEFAULT error: extra characters on line. через call это понятно, но это надо пушить параметры вручную, а хотелось бы сократить текст
1: локальные функции invoke-ать нельзя. А вот stdcall можно использовать и для вызова API. invoke вообще противоречит концепции квадратных скобок в фасме 2: после proc locals ps PAINTSTRUCT endl 3: sizeof.WNDCLASSEX И читать мануал…
2. Компилится без проблем Code (Text): proc test_proc local ps:PAINTSTRUCT endp 3. Code (Text): sizeof.WNDCLASSEX
спасибо всем n0name, я немного неточен был во 2 вопросе, при 1 локальной переменной компиляция проходит, если несколько - начинает ругаться
локальные переменные надеюсь перечисляешь через запятую? Code (Text): local a:POINT,b:POINT,c:DWORD в крайнем случае можно попробовать: Code (Text): locals a POINT b POINT c dd ? endl invoke name = stdcall [name] то есть вызов функции не по метке, а по указателю. то есть косвенный вызов. так надо вызывать функции импортируемые из других DLL. свои же функции надо делать stdcall.
Так для проверки, ну или для опыта -- уроки Iczelion'а переписанные на Fasm на этом сайте часть 1-ая, часть 2-ая, часть 3-ья, папка Images
а как получить адрес в стеке? аналог из масм FindEXE proc DirWORD, Mask2WORD ... 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.