As far as I can tell, the only difference between __asm { ... }; and __asm__(\"...\"); is that the first uses mov eax, var and the sec
__asm { ... };
__asm__(\"...\");
mov eax, var
With gcc compiler, it's not a big difference. asm or __asm or __asm__ are same, they just use to avoid conflict namespace purpose (there's user defined function that name asm, etc.)
asm
__asm
__asm__