Привет, воины! Есть задача: определеить некую макроконстанту (или что-то вроде этого) так, чтобы использованное имя можно было в дальнейшем употребить для объявления переменной. Например Код (Text): ... ;Объявим каким-то макаром MyVar=15 mov eax,MyVar ; ассемблируется в mov eax,15 ;А теперь объявим переменнную с таким же именем MyVar db "Yo",0 ... Я решил задачу с помощью макрофункций, но получается не очень красиво Код (Text): ... MyVar macro exitm <15> endm mov eax,MyVar() ; <<< скобки бы убрать....:( purge MyVar ; после прохода данной строки имя MyVar снова свободно для использования MyVar db "Yo",0 ... Если есть мысли - пишите, буду рад всем откликнувшимся.
А purge убирает только макро или макроконстанту тоже? Если первое, то нет ли аналогичного для макроконстанты? В фасме есть "restore" для "equ", поэтому там такой "изврат в прямом смысле слова" возможен. А зачем это вообще?
IceStudent: purge к сожалению убирает только макро. "А зачем это?" - я дописываю пакет макросов для облегчения жизни мне и только мне!!)). Основной недостаток любого ассемблера как я полагаю - отсутствие понятия пространства имен (ну или его вырожденное присутсвие), что заставляет придумывать тысячи имен, дабы назвать все метки в программе да еще и разными именами. Не сравнить с ЯВУ (e.g. VC++, VC#). Ну вот я и взялся за исправление этой ситуации. Но мое решение временное и не очень основательное, ибо что основательное можно сделать средствами убогого препроцессора MASM? Реальное решение лежит в изменении самого ассемблера, ну а это уже другой разговор...
Проблема с метками есть не у каждого ассемблера. Например, в FASM такой проблемы нет, так как есть локальные метки, начинающиеся с точки: Код (Text): Function1: ... .done: ret Function2: ... .done: ret
ISM Поиграйся с моим извратом на тему меток, он тоже под масм Я даже допекал Hutchessonа, но особого энтузиазма с его стороны не встретил так и придётся на fasm переходить он опенсоурцный и препроцессор мощнее
Y_Mur: обязательно поиграюсь на днях, спасибо. ... ещё бы. Когда есть столько ассемблеров не каждый захочет возиться с созданием своего аналога того же fasm'а. Вообще ни один из современных компиляторов (MASM, NASM, FASM или на худой конец TASM) не имеет каких-либо кардинальных( именно кардинальных!!) преимуществ перед конкурентами. Физиономия ассемблера не очень изменилась за последнее время. Ну может какой-нибудь NASM делать три-четыре формата исполнимых файлов, ну есть почти везде средства детальной обработки аргументов макросов. А что дальше?? Люди, работающие на ЯВУ клянут ассемблер за то что на нем нельзя разарабатывать крупные проекты. ..оно-то можно конечно, но какие трудности нужно преодолеть!! Если создавать новый ассемблер думая о том как доработать какую-то деталь, заимствованную у одного из сородичей, то и смысла нет браться за дело. Как это ни банально звучит, в новой эре программирования ниша, которую занимает ассемблер становиться все уже и уже. ...Время от времени я пописываю (поймите меня правильно))) код для прототипа соего будущего ассемблера. При разаработке его концепции я выявил многие проблемы как асма так и ЯВУ, понял на что должен быть похож действительно удобный язык программирования. Модернизация, которой необходимо подвергнуть асм. очень велика по масштабу, и локальными метками эту проблему не решить) Но это лишь мои идеи, и неизвестно когда я доведу их до реализации...