нужен макрос fasm

Тема в разделе "WASM.BEGINNERS", создана пользователем common_up, 10 фев 2011.

  1. common_up

    common_up New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    85
    :)
    в общем суть такая:
    есть макрос stdcall
    Код (Text):
    1. macro   stdcall proc,[arg]      ; directly call STDCALL procedure
    2.     {
    3.         common
    4.         if ~ arg eq
    5.         reverse
    6.         pushd arg
    7.         common
    8.         end if
    9.         call proc
    10.     }
    Он конечно самодостаточен, но нужно его как-то чуть расширить.
    ТЗ:
    Есть вызов процедур, в которые передаются не значения, а адреса переменных и приходится извращаться таким образом:
    lea eax,[var4]
    push eax
    lea eax,[var3]
    push eax
    lea eax,[var2]
    push eax
    lea eax,[var1]
    push eax
    lea eax,[var0]
    push eax
    stdcall proc_name,[var_stat1],[var_stat2]

    а хотелось бы, чтобы можно было напрямую отдавать stdcall и значения переменных и адреса переменных. Пусть допустим адреса определяются в фигурных скобках. Пример:
    Код (Text):
    1. stdcall,[var_stat1],[var_stat2],{var0},{var1},{var2},{var3},{var4}
    не правда ли выглядит симпатичней и компактней, чем первый вариант ?:) Как раз было бы здорово видеть, что мы передаем. Если фигурные скобки - значит оффсет, если квадратные - значит значение переменной.
    PS: до макросов еще не добрался и т.д, прошу помощи:)
     
  2. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    common_up
    win32ax.inc содержит макросы, предоставляющие такую поддержку посредством вспомогательного слова addr.
    Подробности либо в самих макросах либо в разделе документации Windows Programming -> Extended Headers -> Procedure Parameters.
     
  3. KIV

    KIV Member

    Публикаций:
    0
    Регистрация:
    16 июл 2009
    Сообщения:
    231
    подключаешь не win32a.inc, а win32ax.inc
    и тогда можешь писать:
    Код (Text):
    1. stdcall,[var_stat1],[var_stat2],addr var0,addr var1,addr var2,addr var3,addr var4