Copier le contenu de la variable C dans un registre (GCC)

Depuis que je suis très nouveau dans GCC, je suis confronté à un problème de code d’assemblage en ligne. Le problème est que je ne suis pas capable de comprendre comment copier le contenu d’une variable C (de type UINT32 ) dans le registre eax . J’ai essayé le code ci-dessous:

 __asm__ ( // If the LSB of src is a 0, use ~src. Otherwise, use src. "mov $src1, %eax;" "and $1,%eax;" "dec %eax;" "xor $src2,%eax;" // Find the number of zeros before the most significant one. "mov $0x3F,%ecx;" "bsr %eax, %eax;" "cmove %ecx, %eax;" "xor $0x1F,%eax;" ); 

Cependant mov $src1, %eax; ne fonctionne pas.

Quelqu’un pourrait-il suggérer une solution à cela?

Je suppose que ce que vous recherchez est un assemblage prolongé, par exemple:

  int a=10, b; asm ("movl %1, %%eax; /* eax = a */ movl %%eax, %0;" /* b = eax */ :"=r"(b) /* output */ :"r"(a) /* input */ :"%eax" /* clobbered register */ ); 

Dans l’exemple ci-dessus, nous avons rendu la valeur de b égale à celle de a utilisant des instructions d’assemblage et un registre eax :

 int a = 10, b; b = a; 

S’il vous plaît voir les commentaires en ligne.

Remarque:

 mov $4, %eax // AT&T notation mov eax, 4 // Intel notation 

Une bonne lecture sur l’ assemblage en ligne dans l’environnement GCC.