Fonction asm utilisable en C++, linker error... - C++ - Programmation
Marsh Posté le 26-12-2004 à 09:58:56
Tes fonctions ASM, utilisent la convention d'appel et le name mangling C, donc c'est:
Code :
|
Eventuellement, tu devras rajouter à la main un underscore au début du nom de tes fonctions ASM, mais je ne me souviens plus (la vieillesse, perte de la mémoire, toussa quoi).
Marsh Posté le 26-12-2004 à 12:30:27
ReplyMarsh Posté le 26-12-2004 à 12:39:26
maximew a écrit : asm |
Tu n'as pas forcément accès à des modes différents (addressage 64 bits par exemple), tu ne peux pas facilement manipuler tous tes registres (jouer avec EBP, etc.) et surtout, c'est carrément pas portable (alors que NASM l'est).
Il faut utiliser la syntaxe AT&T avec gcc, et la syntaxe intel avec Visual C++. Et la syntaxe AT&T, c'est le mal absolu. Pire que tout, même la mort.
Marsh Posté le 26-12-2004 à 13:25:21
Citation : * extern "C" |
Merci ca marche impécablement maintenant.
Sinon comme tu l'as indiqué je ne veux pas utiliser de l'assembleur "en ligne" pour des problèmes de syntaxes (AT&T ) et de portabilité.
Marsh Posté le 26-12-2004 à 03:32:17
Salut à tous, j'essaye de faire une fonction en asm compilée avec nasm que je puisse utiliser dans du code C++ (avec dev-c++).
J'ai suivi le tutorial ici : http://perso.wanadoo.fr/philippe.b [...] /asm1.html. Le problème est qu'ils expliquent comment compiler avec le compilateur cvi mais pas avec dev-c++.
Alors voila ma démarche :
Tout d'abord je génère un fichier objet avec nasm en compilant le code suivant avec la commande : D:\Nasm\nasmw.exe -f win32 D:\Nasm\test.asm
Ensuite avec Dev-c++ je créer un projet en invite de commande avec le code suivant :
Dans la partie "linker" de "l'option du projet" de dev-c++ j'indique ou se trouve le fichier objet généré par nasm.
...et quand je compile j'ai droit a :
[Linker error] undefined reference to `Test1(int, int)'
[Linker error] undefined reference to `Test2(int*, int*)'
J'en conclu qu'il ne toruve pas la fonction Test1 et Test2 que j'ai écri en asm pourtant j'ai bien intégré le fichier obj généré par nasm.
Dans ce cas là d'où vient le problème ???