Можно ли как-то сделать так, чтобы употреблять INVOKE для вызовов своих же процедур, но передача параметров происходила бы не через стек, а через регистры?
invoke не поддерживает fastcall. В примерах масм32 есть реализация макроса coinvoke (для вызова методов COM). Можете переделать его под fastcall.
Я пока не дошёл до методов COM, мне бы свои процедуры вызывать... Хорошо - как мне обернуть в макрос или ещё во что что-нибудь такое: mov ax,param1 mov bx, param2 mov cx,param3 .... call MyProc Чтобы писать это в одну строчку? Ну не invoke пусть, а по-другому обозвать - мне без разницы. И чтобы компилятор ругался, если я передал не то число параметров? Просто у меня всё такое пока простое, что нет смысла в стек запихивать (хватает регистров). А сервиса, однако, хочется. К хорошему быстро привыкаешь.
alex_tg Code (Text): ;Макро - процедура, позволяющая вводить несколько команд на одной строке, ; используя разделитель - символ "|" ;Пример: LN mov eax,ecx | xor ecx,ecx ;Откомпилируется как mov eax,ecx и после xor ecx,ecx LN macro CmdLine:VARARG LOCAL CurParam,NextParam CurParam=1 NextParam=0 WHILE NextParam LT @SizeStr(<CmdLine>) NextParam INSTR CurParam, <CmdLine>, <|> IFE NextParam NextParam=@SizeStr(<CmdLine>)+1 ENDIF @SubStr(<CmdLine>, CurParam, NextParam-CurParam) ;;выделенная команда CurParam=NextParam+1 ENDM ENDM