ASM INLINE AVEC GCC EN SYNTAXE INTEL

Signaler
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
-
Messages postés
280
Date d'inscription
dimanche 7 septembre 2003
Statut
Membre
Dernière intervention
8 juillet 2014
-
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

Messages postés
280
Date d'inscription
dimanche 7 septembre 2003
Statut
Membre
Dernière intervention
8 juillet 2014
5
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;
}
Messages postés
8
Date d'inscription
mardi 30 mars 2004
Statut
Membre
Dernière intervention
16 octobre 2006

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?
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
Dans le même genre et pour avoir de l'asm x86 dans gdb, çà peut servir : set disassembly-flavor intel