Why does the syntax matter?
What matters is getting the constraint strings right. The actual instruction between the first pair of quotes doesn't really matter.
This "works" (compiles without complaint)
It doesn't work because the top of the stack are not parameters, but the return address (and other things).
$ cat foo.c
void foo ( unsigned long count, ...)
for(;count > 0;count--)
asm("pop %0\n" : :"m"(cur_val) );
$ gcc -masm=intel foo.c
The variadic parameters would be accessible though ebp, not esp.
The generated code around the asm looks like this
.type foo, @function
mov ebp, esp
sub esp, 24
# 9 "foo.c" 1
pop DWORD PTR [ebp-4]
# 0 "" 2
mov eax, DWORD PTR [ebp-4]