There can be weird interactions unless there are strong enough limits on what kind of expressions the assembler allows. Especially if it supports conditional assembly and loops in the macros. One ugly way around it -- which causes its own headaches -- is to introduce pass-sensitive conditional assembly (as in "if in pass 1/2/...").
It's also "fun" if some instructions come in different sizes... and you may need stronger restrictions on allowed expressions in that case.
It's also "fun" if some instructions come in different sizes... and you may need stronger restrictions on allowed expressions in that case.