Про INVOKE в MASM32

Тема в разделе "WASM.BEGINNERS", создана пользователем alex_tg, 18 мар 2008.

  1. alex_tg

    alex_tg New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2008
    Сообщения:
    15
    Можно ли как-то сделать так, чтобы употреблять INVOKE для вызовов своих же процедур, но передача параметров происходила бы не через стек, а через регистры?
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    invoke не поддерживает fastcall. В примерах масм32 есть реализация макроса coinvoke (для вызова методов COM). Можете переделать его под fastcall.
     
  3. alex_tg

    alex_tg New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2008
    Сообщения:
    15
    Я пока не дошёл до методов COM, мне бы свои процедуры вызывать...

    Хорошо - как мне обернуть в макрос или ещё во что что-нибудь такое:

    mov ax,param1
    mov bx, param2
    mov cx,param3
    ....
    call MyProc

    Чтобы писать это в одну строчку? Ну не invoke пусть, а по-другому обозвать - мне без разницы. И чтобы компилятор ругался, если я передал не то число параметров? Просто у меня всё такое пока простое, что нет смысла в стек запихивать (хватает регистров). А сервиса, однако, хочется. К хорошему быстро привыкаешь.
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    alex_tg
    See KmdKit macroses.
     
  5. alex_tg

    alex_tg New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2008
    Сообщения:
    15
    > See KmdKit macroses

    А вот где это посмотреть?
     
  6. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
  7. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    alex_tg
    Гугла спросил бы. http://www.wasm.ru/toollist.php?list=21#221
     
  8. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    alex_tg
    Код (Text):
    1. ;Макро - процедура, позволяющая вводить несколько команд на одной строке,
    2. ; используя разделитель - символ "|"
    3. ;Пример: LN mov eax,ecx | xor ecx,ecx
    4. ;Откомпилируется как mov eax,ecx и после xor ecx,ecx
    5.  
    6. LN macro CmdLine:VARARG
    7.   LOCAL CurParam,NextParam
    8.   CurParam=1
    9.   NextParam=0
    10.   WHILE NextParam LT @SizeStr(<CmdLine>)
    11.     NextParam INSTR CurParam, <CmdLine>, <|>
    12.     IFE NextParam
    13.       NextParam=@SizeStr(<CmdLine>)+1
    14.     ENDIF
    15.     @SubStr(<CmdLine>, CurParam, NextParam-CurParam) ;;выделенная команда
    16.     CurParam=NextParam+1
    17.   ENDM
    18. ENDM