Макросы в fasm

Тема в разделе "WASM.ASSEMBLER", создана пользователем FaceOFF, 27 июл 2005.

  1. FaceOFF

    FaceOFF New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2004
    Сообщения:
    11
    :lol: тока не бейте.. я поискал по форуму..



    Можно ли в fasm'е сделать так, чтобы макрос возвращал значение, как в masm'е? т.е. использовать макрос в качестве аргумента или операнда...
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Раньше нельзя было, теперь не знаю, скорее всего, можно.



    Для размышления: топ на форуме фасма.
     
  3. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    В общем-то, в fasm это можно было делать и раньше. Только значение не возвращать, а присваивать его какому-то глобальному идентификатору, например __@__. Правда, "возвращаемое" таким образом значение можно будет использовать только в макросах, в ассемблерных командах нельзя.



    MASM:
    Код (Text):
    1. $MAKELANGID macro s,p:REQ
    2.    exitm (p shl 10) or s
    3. $MAKELANGID endm
    4.  
    5. mov   eax,$MAKELANGID
    FASM:
    Код (Text):
    1. @@MAKELANGID equ @MAKELANGID
    2. macro @MAKELANGID s, p
    3. {
    4.     restore __@__
    5.     __@__ = (p shl 10) or s
    6. }
    7.  
    8. macro  mov dest,arg
    9. {  
    10.     if @ # arg eq arg
    11.         arg
    12.         if~dest eq __@__
    13.             mov dest,__@__
    14.         end if
    15.     else if~dest eq arg
    16.          mov    dest,arg        
    17.     end if
    18. }
    19.  
    20. mov   eax, <@MAKELANGID 1,1>
    на первый взгляд такой подход более громоздкий, но реально предоставляет больше возможностей.