FASM, вопрос по препроцессору

Тема в разделе "WASM.BEGINNERS", создана пользователем f13nd, 22 июн 2009.

  1. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.158
    Сам не новичек, но вопрос правда дебилен =)

    macro num id{lol.#id#.desc equ 'yo'}
    any = 1 ;либо equ - не принципиально
    ;num 1 ;получаем lol.1.desc equ 'yo'
    num any ;увы, не то же самое: lol.any.desc equ 'yo'
    display lol.1.desc

    Когда-то возникла потребность использовать значения счетчика в метках, упершись в это, нашел другое решение. Есть ли возможность (пусть по-ягодичному) подставлять числовые значения в названия меток/констант?
     
  2. Clear__Energy

    Clear__Energy New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2009
    Сообщения:
    432
    Если я правильно понял, то тебе надо переименовывать метки в процессе работы программы, и, следовательно, менять логику её работы?
    вообще-то метки транслируются в адреса и строками не являются
     
  3. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.158
    Разумеется не являются. Я не собираюсь менять логику работы - просто необходимо объявить немерено однотипных констант, по которым будут генерироваться обработчики в нескольких частях программы. Если например следующая конструкция нормально переваривается

    macro num id1,id2,id3{lol.#id1#id2#id3 equ 'yo'}
    num 1,2,3
    display lol.123

    то теоретически задача решима. Вот только как? Не верю, что никто не сталкивался с этим.
     
  4. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    заменить equ на define?
     
  5. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Руководство по fasm почитай. Помню, там как раз приводился пример на эту тему.
     
  6. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    экранировать # ?
    macro num id{lol.\#id\#.desc equ 'yo'}

    может и сталкивался, но непомню. читай fasm.pdf
     
  7. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.158
    Нет разницы.

    Если б кто ткнул пальцем...

    Если объявлять any через equ или define, да, криво, но будет lol.#1#.desc equ 'yo'. Беда в том, что equ просто заменяет одно выражение другим, это не численное значение, которые можно перечислить в макросе (равно как и fix). Если подсовывать макросу число все равно будет подставляться его имя вместо значения.
     
  8. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    тогда используй match для преобразования имени в значение
    Код (Text):
    1. macro num id
    2. {
    3.         match id_,id
    4.         \{
    5.                 lol.\#id_\#.desc equ 'yo'
    6.         \}
    7. }
    8.  
    9. foo equ 1
    10.  
    11. num foo
    12.  
    13. display lol.1.desc