Изврат в прямом смысле слова

Тема в разделе "WASM.ASSEMBLER", создана пользователем ISM, 19 янв 2007.

  1. ISM

    ISM Серега

    Публикаций:
    0
    Регистрация:
    20 мар 2006
    Сообщения:
    23
    Адрес:
    Transnistria
    Привет, воины!
    Есть задача: определеить некую макроконстанту (или что-то вроде этого) так, чтобы использованное имя можно было в дальнейшем употребить для объявления переменной. Например
    Код (Text):
    1. ...
    2.  
    3. ;Объявим каким-то макаром MyVar=15
    4.  
    5. mov eax,MyVar ; ассемблируется в mov eax,15
    6.  
    7. ;А теперь объявим переменнную с таким же именем
    8.  
    9. MyVar db "Yo",0
    10.  
    11. ...
    Я решил задачу с помощью макрофункций, но получается не очень красиво
    Код (Text):
    1. ...
    2.  
    3. MyVar macro
    4.     exitm <15>
    5. endm
    6.  
    7. mov eax,MyVar() ; <<< скобки бы убрать....:(
    8.  
    9. purge MyVar ; после прохода данной строки имя MyVar снова свободно для использования
    10.  
    11. MyVar db "Yo",0
    12.  
    13. ...
    Если есть мысли - пишите, буду рад всем откликнувшимся.
     
  2. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    myVar = 15
    myVar equ 15

    чего бы так и не юзать?
     
  3. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    А purge убирает только макро или макроконстанту тоже? Если первое, то нет ли аналогичного для макроконстанты? В фасме есть "restore" для "equ", поэтому там такой "изврат в прямом смысле слова" возможен. А зачем это вообще?
     
  4. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    да, я понял, что я глупость предложил выше, т.к. не вчитался в суть топика.
     
  5. ISM

    ISM Серега

    Публикаций:
    0
    Регистрация:
    20 мар 2006
    Сообщения:
    23
    Адрес:
    Transnistria
    IceStudent: purge к сожалению убирает только макро.
    "А зачем это?" - я дописываю пакет макросов для облегчения жизни мне и только мне!!)). Основной недостаток любого ассемблера как я полагаю - отсутствие понятия пространства имен (ну или его вырожденное присутсвие), что заставляет придумывать тысячи имен, дабы назвать все метки в программе да еще и разными именами. Не сравнить с ЯВУ (e.g. VC++, VC#). Ну вот я и взялся за исправление этой ситуации. Но мое решение временное и не очень основательное, ибо что основательное можно сделать средствами убогого препроцессора MASM? Реальное решение лежит в изменении самого ассемблера, ну а это уже другой разговор...
     
  6. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Проблема с метками есть не у каждого ассемблера. Например, в FASM такой проблемы нет, так как есть локальные метки, начинающиеся с точки:
    Код (Text):
    1. Function1:
    2.     ...
    3. .done:
    4.     ret
    5.  
    6. Function2:
    7.     ...
    8. .done:
    9.     ret
     
  7. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    локальные метки есть во ВСЕХ ассемблерах...
     
  8. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    ISM
    Поиграйся с моим извратом на тему меток, он тоже под масм ;)
    Я даже допекал Hutchessonа, но особого энтузиазма с его стороны не встретил ;) так и придётся на fasm переходить он опенсоурцный и препроцессор мощнее :)
     
  9. ISM

    ISM Серега

    Публикаций:
    0
    Регистрация:
    20 мар 2006
    Сообщения:
    23
    Адрес:
    Transnistria
    Y_Mur: обязательно поиграюсь на днях, спасибо.
    ... ещё бы. Когда есть столько ассемблеров не каждый захочет возиться с созданием своего аналога того же fasm'а. Вообще ни один из современных компиляторов (MASM, NASM, FASM или на худой конец TASM) не имеет каких-либо кардинальных( именно кардинальных!!) преимуществ перед конкурентами. Физиономия ассемблера не очень изменилась за последнее время. Ну может какой-нибудь NASM делать три-четыре формата исполнимых файлов, ну есть почти везде средства детальной обработки аргументов макросов. А что дальше?? Люди, работающие на ЯВУ клянут ассемблер за то что на нем нельзя разарабатывать крупные проекты. ..оно-то можно конечно, но какие трудности нужно преодолеть!! Если создавать новый ассемблер думая о том как доработать какую-то деталь, заимствованную у одного из сородичей, то и смысла нет браться за дело. Как это ни банально звучит, в новой эре программирования ниша, которую занимает ассемблер становиться все уже и уже.
    ...Время от времени я пописываю (поймите меня правильно))) код для прототипа соего будущего ассемблера. При разаработке его концепции я выявил многие проблемы как асма так и ЯВУ, понял на что должен быть похож действительно удобный язык программирования. Модернизация, которой необходимо подвергнуть асм. очень велика по масштабу, и локальными метками эту проблему не решить:)) Но это лишь мои идеи, и неизвестно когда я доведу их до реализации...