ayorosmage | 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
Code :
- ;-------------|-------|-------------------|----------------------------
- ;-------------|-------|-------------------|----------------------------
- ;-------------|-------|-------------------|----------------------------
- ;-------------|-------|-------------------|----------------------------
- segment .text
- global _Test1
- global _Test2
- ;-------------|-------|-------------------|----------------------------
- ;-------------|-------|-------------------|----------------------------
- ;-------------|-------|-------------------|----------------------------
- ;-------------|-------|-------------------|----------------------------
- _Test1:
- push ebp
- mov ebp, esp
-
- mov eax, [ebp+8] ; 1er argument
- mov ecx, [ebp+12] ; 2eme argument
- add eax, ecx
-
- pop ebp ;
- ret ; retour, la somme est dans
- ; EAX
-
- ;-------------|-------|-------------------|----------------------------
- ;-------------|-------|-------------------|----------------------------
- ;-------------|-------|-------------------|----------------------------
- ;-------------|-------|-------------------|----------------------------
- _Test2:
- push ebp
- mov ebp, esp
-
- mov eax, [ebp+8] ; on met l'adr
- mov eax, [eax] ; om met la valeur pointée
- mov ecx, [ebp+12] ; on prend l'adr du 2me
- ; argument
- add eax, [ecx] ; on add avec la valeur
- ; pointée
-
- pop ebp
- ret ; retour, la somme est dans
- ; EAX
|
Ensuite avec Dev-c++ je créer un projet en invite de commande avec le code suivant :
Code :
- #include <iostream>
- using namespace std;
- //---------------------------------------------------------------------
- int Test1(int Val1, int Val2);
- int Test2(int *Val1, int *Val2);
- //---------------------------------------------------------------------
- int main(int argc, char *argv[]){
- int Val;
- int Val1, Val2;
- Val = Test1(3,8);
- cout<<"La valeur de retour est : "<<Val<<endl;
- Val1 = 8;
- Val2 = 13;
- Val = Test2(&Val1,&Val2);
- cout<<"La valeur de retour est : "<<Val<<endl;
- int fin;
- cin>>fin;
- return 0;
- }
|
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 :
Citation :
[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 ???
|