вопросы по сям - макроязык

Discussion in 'WASM.BEGINNERS' started by Magnum, Jun 26, 2008.

  1. Magnum

    Magnum New Member

    Blog Posts:
    0
    Joined:
    Dec 29, 2007
    Messages:
    925
    Всем привет
    давненько меня тут не было
    такие вопросы:

    1. Нужно написать простой макрос на сях по типу асм-вставки
    у меня получилось так

    #define xchgMem(a,b) _asm{push a} _asm{push b} _asm {pop a} _asm {pop b}

    но писать вот так в строчку по комманде не удобно
    как можно оформить код чтобы макрос выглядел так

    _asm
    {
    push a
    push b
    pop a
    pop b
    }

    т.к. большие макросы в трочку писать не удобно, а при переносах - не компилируется, даже если строки заканчивать \

    2. можно ли как то заставить принимать функцию аргументы 2х типов
    Например чтобы принимался и PCHAR и PDWORD

    чтобы не указывать при вызове функции в скобках тип аргумента
     
  2. UTeX

    UTeX New Member

    Blog Posts:
    0
    Joined:
    Oct 19, 2007
    Messages:
    584
    а так чем плохо?
    Code (Text):
    1. #define xchgMem(a,b)            \
    2.    _asm{push a}                 \
    3.    _asm{push b}                 \
    4.    _asm {pop a}                 \
    5.    _asm {pop b}
    может это?
    Code (Text):
    1. __declspec(naked)
     
  3. censored

    censored New Member

    Blog Posts:
    0
    Joined:
    Jul 5, 2005
    Messages:
    1,615
    Location:
    деревня "Анонимные Прокси"
    1. Так пойдет?
    Code (Text):
    1. #define xchg(a,b) __asm push a; \
    2.                   __asm push b; \
    3.                   __asm pop a; \
    4.                   __asm pop b;
    2. Перегрузка?
     
  4. Magnum

    Magnum New Member

    Blog Posts:
    0
    Joined:
    Dec 29, 2007
    Messages:
    925
    нет.
    Тогда самому прийдется открывать и закрывать стековый фрейм.

    почитал в гугле об этом.
    Как вариант!
    спасибо
     
  5. UTeX

    UTeX New Member

    Blog Posts:
    0
    Joined:
    Oct 19, 2007
    Messages:
    584
    В каком смысле?
     
  6. _basmp_

    _basmp_ New Member

    Blog Posts:
    0
    Joined:
    Jul 10, 2005
    Messages:
    2,939
    Magnum
    Code (Text):
    1. void l(void* m){}
    2.  
    3. main()
    4. {
    5. char c;
    6. int i;
    7. l(&c); l(&i);
    8. }
     
  7. Mika0x65

    Mika0x65 New Member

    Blog Posts:
    0
    Joined:
    Jul 30, 2005
    Messages:
    1,384
    Перегрузка -- это, скорее С++ чем С. А чтобы не указывать тип можно воспользоваться union.
     
  8. censored

    censored New Member

    Blog Posts:
    0
    Joined:
    Jul 5, 2005
    Messages:
    1,615
    Location:
    деревня "Анонимные Прокси"
    Mika0x65
    Сдается мне, что человеку все равно С или С++ ж)