Inline asm + classe = erreur!

Darkneon Messages postés 56 Date d'inscription vendredi 18 mai 2001 Statut Membre Dernière intervention 13 décembre 2005 - 15 janv. 2004 à 02:30
Darkneon Messages postés 56 Date d'inscription vendredi 18 mai 2001 Statut Membre Dernière intervention 13 décembre 2005 - 16 janv. 2004 à 21:05
Salut a tous.

Lorsque je mets du codes assembleur dans ma classe le compilateur me renvoit l'erreur suivante.
"Inline assembly not allowed in inline and template functions"

Pour mettre le code j'utilise _asm { ... }, c'est dans une function dans la section public de la classe. La class est dans un header.

Quelqu'un sait comment contourner se probleme sans utiliser REGS ou les registres directes comme _AX. J'utilise TC++.

Merci d'avance !


Party 'till you drop !!!

14 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
15 janv. 2004 à 12:28
apparement selon l'erreur, tu ne pas mettre d'asm dans un fonction inline(définie dans le corps de la classe) :

class test
{
void ma func();
};

void test::func()
{
__asm{
... de l'asm ici
}
}

ça devrait marcher
0
Darkneon Messages postés 56 Date d'inscription vendredi 18 mai 2001 Statut Membre Dernière intervention 13 décembre 2005
15 janv. 2004 à 18:30
*se cogne le front contre le mur*

C'etait trop evident :big)

Mais j'ai un autre probleme, lorsque j'utilise une variable declaree dans la section private de ma class, dans un bloque asm, cela me donne une erreur de "expression syntax error"?

Party 'till you drop !!!
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
15 janv. 2004 à 19:45
le bloc asm est-il dans une méthode de la classe ?

met exemple pour voir l'erreur.
0
Darkneon Messages postés 56 Date d'inscription vendredi 18 mai 2001 Statut Membre Dernière intervention 13 décembre 2005
15 janv. 2004 à 20:09
Oui, c'est dans la meme methode

Ex:

class ClassA() {
private:
int var;
public:
void Func();
};

void ClassA::Func() {
_asm MOV [var], AX;
}


Party 'till you drop !!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Darkneon Messages postés 56 Date d'inscription vendredi 18 mai 2001 Statut Membre Dernière intervention 13 décembre 2005
15 janv. 2004 à 20:13
Le compilateur me renvoit a la ligne ou il y a l'expression asm.

Party 'till you drop !!!
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
15 janv. 2004 à 20:50
tu n'as qu'a appeler une fonction non membre à partir de la fonction membre, ce qui te permettra de récupérer sans probleme les variables en private
0
Darkneon Messages postés 56 Date d'inscription vendredi 18 mai 2001 Statut Membre Dernière intervention 13 décembre 2005
15 janv. 2004 à 20:58
Vecchio, je suis pas sur d'avoir tout a fait compris ce que tu veux dire, met un exemple.

En faite, je suis meme pas sur si t'as bien compris le probleme?

Party 'till you drop !!!
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
15 janv. 2004 à 21:02
ton problème c'est que dans ton code asm tu ne peux pas utiliser certaines variables parce qu'elles sont privées non?
Si elles étaient publiques, tu aurais le meme probleme ou pas?
0
Darkneon Messages postés 56 Date d'inscription vendredi 18 mai 2001 Statut Membre Dernière intervention 13 décembre 2005
15 janv. 2004 à 21:06
Attend, je vais aller tester plus. Les variables sont privee en dehors de la class, mais peuvent etre utiliser partout dans la class. Le bloque asm est dans la class.

Je teste, je reviens.

Party 'till you drop !!!
0
Darkneon Messages postés 56 Date d'inscription vendredi 18 mai 2001 Statut Membre Dernière intervention 13 décembre 2005
15 janv. 2004 à 21:21
Alors,

J'ai beau declarer la variable dans n'importe quel section de la classe: private, protected ou public, j'ai toujours la meme erreur.

Si je declare la variable en global, la j'ai aucune erreur.

Mais je crois qu'il doit y avoir une syntaxe speciale pour utiliser les variables dans la classe. Apres tout, le compilateur me renvoit une erreur de syntaxe et non que la variable n'as pas ete trouver.

J'ai regarder dans l'aide du compilateur mais rien trouver.

Party 'till you drop !!!
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 janv. 2004 à 00:42
Dommage j'avais pas vu cette discussion plus tot.
int var;
...
_asm MOV [var], AX; ERRATUM !!!
operandes sont de tailles differentes.

__asm mov word ptr[var], ax
devrait passer nettement mieux.

BruNews, ciao...
0
Darkneon Messages postés 56 Date d'inscription vendredi 18 mai 2001 Statut Membre Dernière intervention 13 décembre 2005
16 janv. 2004 à 09:16
BruNews t'as surement raison sauf que j'ai teste et le compilatuer me revoit toujours la meme erreur.

Je n'y comprends plus rien, c'est comme si le foutu compilateur ne me laissait pas utiliser des variables declarer dans une classe, dans du asm. :(

J'ai cherche sur le net mais j'ai rien trouver sur le sujet.

Essayer de compiler l'exemple les gars, p-e c'est juste une question de compilateur.

Moi je commence a perdre espoire, je crois que je vais me rabattre sur les registres directe du compilateur finalement.

Party 'till you drop !!!
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 janv. 2004 à 11:07
Ah oui je n'avais pas tout vu, il etait tard.
__asm mov word ptr[var], ax
cette ligne est valable au niveau de la syntaxe mais meme pas besoin d'essayer, je pensais var locale a la fonction, et non, c'est un membre de la classe donc pas besoin d'essayer, le compilo a raison.
var est alloue avec le reste de ta classe, faudrait donc calculer son offset en memoire a l'execution. Il est donc impossible d'ecrire direct 'mov [var], truc', dans tous les cas s'il faut vraiment de l'asm pour optimiser alors vire les classes et tu feras ce que tu veux.

BruNews, ciao...
0
Darkneon Messages postés 56 Date d'inscription vendredi 18 mai 2001 Statut Membre Dernière intervention 13 décembre 2005
16 janv. 2004 à 21:05
Merci a tous et merci BruNews,

Je comprends beaucoup mieux grace a l'explication.

Party 'till you drop !!!
0
Rejoignez-nous