ASM INLINE AVEC GCC EN SYNTAXE INTEL

cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 - 3 août 2006 à 13:49
acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 - 2 sept. 2007 à 18:36
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/38813-asm-inline-avec-gcc-en-syntaxe-intel

acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
2 sept. 2007 à 18:36
salut

moi l'asm inline at&t je l'utilises uniquement comme ça
pour utiliser un nom déclaré en C dans de l'asm les noms sont précédés par un _
mais comme l'asm est assemblé après la compilation, et qu'à la compilation les variables locales sont dans la pile ou les registres (et leur nom disparait), on ne peut utiliser que les variables globales (c'est logique et ça n'a pas spécialement de raison d'être autrement)
de la même manière on ne peut pas utiliser des noms en C qui ont été déclarés en asm sauf si en C on les déclare externe avant ou si on déclare le prototype pour une fonction

#include <stdio.h>
#include <stdio.h>
int eaxRes;

void mafonction2();
void mafonction() {
printf("ma fonction\n");
}

asm("_mafonction2:");
asm("ret");

int main() {
asm("movl $0x123, %eax");
asm("movl %eax, _eaxRes");

printf("%x\n",eaxRes); // affiche 123 (hexa)

asm("movl $123, %eax");
asm("movl %eax, _eaxRes");

printf("%d\n",eaxRes); // affiche 123

eaxRes = 122;
asm("movl _eaxRes, %eax");
asm("addl $1, %eax");
asm("movl %eax, _eaxRes");
printf("%d\n",eaxRes); // affiche 123

asm("call _mafonction"); // affiche ma fonction

mafonction2();
return 0;
}
jb_gfx Messages postés 8 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 16 octobre 2006
16 oct. 2006 à 08:20
Je sais toujours pas comment récupérer le contenu d'un registre dans une variable C. Si tu peux m'expliquer... merci

Par exemple:
eax=0x02B et j'ai ma variable C: int eaxRes;
Comment je place 0x02B dans eaxRes à la fin de ma routine asm?
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
3 août 2006 à 13:49
Dans le même genre et pour avoir de l'asm x86 dans gdb, çà peut servir : set disassembly-flavor intel
Rejoignez-nous