#define FUNC(func, ret) \a means ax/eax/rax/r0, and we can exchange a to b,c,d or r to indicate ebx,ecx,edx or any general purpose registers. And we can use %0 to indicate "=a" (ret), it means to output ax/eax/rax to memory space ret pointed, and %1 to indicate "a" (func), move the value of func to ax/eax/rax.
asm ("asm_func" \
: "=a" (ret) \
: "a" (func) \
);
Ref: GCC inline assembly HOWTO.
The external link is very useful, but not latest reference. I will continue showing some example not related with my works.