Знаете что теперь в Fasm можно указывать значения переменных из командной строки? Например: Fasm -dDEBUG=TRUE В результате чего будут работать конструкции вида match =TRUE, DEBUG { ... } Так вот на основании этого захотелось мне, чтобы в отладочных версиях программ логировался вход и выход из процедур. Для этого был переопределен макрос proc. Получилось что-то вроде Код (Text): macro proc [args] { common match name params, args> \{ PROCNAME equ name ;В результате работы match name будет соответствовать имени ;процедуры define@call name,<params \} match =TRUE, DEBUG \{ jmp @f DebugString DB PROCNAME --??????? DB ' entered',0 @@: \} } Вот тут-то и проблема как массив байт DebugString сделать так, так чтобы его содержимое соответствовало PROCNAME? Фактически задача сводится к тому, чтобы из PROCNAME получить 'PROCNAME', чтобы конструкция DebugString DB PROCNAME заработала. Но я вертел и так и эдак и так и не смог придумать как.
Это ты имеешь ввиду значок над тильдой типа апостроф Эта штука конертирует имя переменной в строку в кавычках. то есть name equ SomeProc PROCNAME equ `name - В результате сего действа Переменная PROCNAME будет равна 'name', а не 'SomeProc' как бы хотелось. Меня это смутило поначалу Но есть оговорка, что если переменная является параметром макроса, она таки будет развернута в свое значение. Используя это можно сделать следующее Код (Text): local DebugString match =TRUE, DEBUG \{ match PROCNAME params, `args> \\{ jmp @f DebugString DB PROCNAME DB ' entered',0 @@: stdcall WriteToFile, DebugString \\} \} Так все работает. asmfan спасибо за умную мысль Если использовать данный метод, то в отладочной версии можно логировать в файл вход и выход из процедур и при этом не загромождать отладочной информацией основной исходник программы. А при установки Debug в FALSE (точнее не в TRUE) весь этот отладочный мусор убирается из кода нафиг.