Unfortunately, some compiler-specific documentations say "does
not work".
And when it does work, the format of the string literal is
extremenly non-portable.
That's rather obvious, isn't it? Assembler is by definition
non-portable. And the standard does say that the interpretation
of the string is "implementation defined"; an implementation in
which all strings result in an error is fully conform, provided
that the implementation documents it.
Note that some compilers don't take this too literally, or
extend it in various ways. In g++, for example, you can add
various "constraints" after the string literal, to cause the
compiler to map arguments to arbitrary C++ expressions.
Technically, I suppose that this is non-conformant, but I can't
see where it could matter; since the string literal is already
implementation defined, replacing it with something slightly
more complex isn't going to break compatibility any more than it
is already broken.