cs_Nebula
Messages postés787Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 7 juin 2007
-
3 août 2006 à 13:49
acx01b
Messages postés280Date d'inscriptiondimanche 7 septembre 2003StatutMembreDerniè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.
acx01b
Messages postés280Date d'inscriptiondimanche 7 septembre 2003StatutMembreDernière intervention 8 juillet 20146 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
2 sept. 2007 à 18:36
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;
}
16 oct. 2006 à 08:20
Par exemple:
eax=0x02B et j'ai ma variable C: int eaxRes;
Comment je place 0x02B dans eaxRes à la fin de ma routine asm?
3 août 2006 à 13:49