fasm дериктивы компилятора

Тема в разделе "WASM.BEGINNERS", создана пользователем el-, 29 янв 2007.

  1. el-

    el- New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    89
    есть ли в фасме аналоги директив компилятора ... напрмиер как в VC

    Код (Text):
    1. #define DEBUG
    2.  
    3. #ifdef DEBUG
    4.  // ...
    5. #else
    6.  // ...
    7. #endif
     
  2. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    есть (if/else/endif)
     
  3. OioVologda

    OioVologda New Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2006
    Сообщения:
    91
    ФАСМ вообще вещь. ФАСМ рулит, и будет рулить!

    Что касается директив компилятора, поиск по сайту. Я как раз таким образом нашел себе материалы по fasm, после чего и подсел на него.
     
  4. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Код (Text):
    1. define DEBUG 1
    2.  
    3. if ~ defined DEBUG
    4.     ; ...
    5. else
    6.     ; ...
    7. end if
     
  5. vid

    vid New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2007
    Сообщения:
    4
    Quantum: Het. Tвая прогрлама есть неверной. Ето как "if ~ defined 1"

    в препроцесорн:
    Код (Text):
    1. SYMBOL equ 1
    2. match =1, SYMBOL {
    3.   db 'дефинованиь',0
    4. }
    5. match =SYMBOL, SYMBOL {
    6.  db 'нет дефинованиь',0
    7. }
    в асемблери используйте макро "ifndef":
    Код (Text):
    1. macro ifndef expr*
    2. {
    3.    local ..HERE
    4.    if defined ..HERE | ~ defined expr
    5.      ..HERE = 1
    6. }
    7.  
    8. a:
    9. if ~ defined a
    10.   display '~ defined a',10
    11. end if
    12. if ~ defined b
    13.   display '~ defined b',10
    14. end if
    15. if ~ defined c
    16.   display '~ defined c',10
    17. end if
    18. ifndef a
    19.   display 'ifndef a',10
    20. end if
    21. ifndef b
    22.   display 'ifndef b',10
    23. end if
    24. ifndef c
    25.   display 'ifndef c',10
    26. end if
    27. b:
     
  6. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    vid
    Example 1:
    Код (Text):
    1. if ~ defined DEBUG
    2.     nop
    3. else
    4.     int3
    5. end if
    Assembles a nop.

    Example 2:
    Код (Text):
    1. define DEBUG 1
    2.  
    3. if ~ defined DEBUG
    4.     nop
    5. else
    6.     int3
    7. end if
    This time we get an int3. So, it's correct.
     
  7. vid

    vid New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2007
    Сообщения:
    4
    Код (Text):
    1. if ~defined X
    2.   define Y 1
    3. end if
    4. if ~defined Y
    5.   display 'works'
    6. else
    7.   display 'doesnt work'
    8. end if
     
  8. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    vid
    Ты неправ, if defined работает именно так, как написал Quantum, смотри справку. Другое дело, что если это нужно использовать как в сях (#ifndef X #define X #endif), тогда уже применять такой код, как у тебя.
     
  9. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    макрос, который проверяет наличие переменной DEBUG_VERSION, и вставляет отладочный код в случаях, если она не определена или равна 1
    Код (Text):
    1. macro deb
    2. {  
    3.     local ..nodeb
    4. if defined DEBUG_VERSION
    5.  if DEBUG_VERSION
    6.     pusha
    7.     invoke IsDebuggerPresent
    8.     test eax,eax
    9.     popa
    10.     jz ..nodeb
    11.     int3
    12.   ..nodeb:
    13.  end if
    14. else
    15.     pusha
    16.     invoke IsDebuggerPresent
    17.     test eax,eax
    18.     popa
    19.     jz ..nodeb
    20.     int3
    21.   ..nodeb:
    22. end if  
    23. }
    макрос с блокированием повторного включения текста:
    Код (Text):
    1. macro CSSupport {
    2. if ~ defined CSSupportUsed
    3.              CSSupportUsed equ 1
    4.     .........
    5. end if
    6. }
     
  10. vid

    vid New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2007
    Сообщения:
    4
    "if" в фасме есть ассеимблерова директива, нет препроцесорова (как "#if" в C).

    директива "define" ест препроцесороваю
    директива "if defined" ест ассеимблерова. это проверяет, определенный ли все навестия.
    Код (Text):
    1. a:
    2. if defined (a+8*(b shl 5))
    3.   display 'yeah'
    4. end if
    5. if defined (a+8*(c shl 5))
    6.   display 'uh-oh'
    7. else
    8. b  db " <|> ",0
    "if defined 1" всегда правда.