I am using gcc on a 32bit intel machine. i have defined an inline function. This function is inline . what all registers needs to pushed and poped in the inline assembly so that the functions wont disturb the registers in the function ( in which it is C inlined ). inline unsigned long hello(unsigned long a) { int b; asm ("movl %1, %%eax; " movl %1, %%ebx; "movl %1, %%ecx; "movl %1, %%esi; "movl %1, %%edi; "movl %%eax, %0;" :"=r"(b) /* output */ :"r"(a) /* input */ ); }