Pour ce que vous avez écrit, le compilateur convertit le premier opérande en %fs:%eax
car il choisit %eax
comme registre ayant la valeur mee
. Le mode d'adressage je pense que vous essayez d'utiliser est base: décalage et le décalage doit être une valeur plutôt qu'un registre. C'est la raison de l'erreur "mauvais opérande de mémoire". Cela a fonctionné dans le cas %fs:0x30
car 0x30
est une valeur immédiate.
Pour utiliser le registre %eax
comme un décalage, essayez un déréférencement de celui-ci %%fs:(%1)
pour obtenir la valeur dans le registre:
int mee = 48;
asm("movl %%fs:(%1), %0" : "=r" (peb) : "r" (mee) :);
Voir aussi this guide, qui contient quelques exemples d'accès à la mémoire peut-être utiles (et plus) dans l'assemblage en ligne.
J'ai travaillé merci pour l'explication –