Compile pas mon asm

Compile pas mon asm - C++ - Programmation

Marsh Posté le 18-10-2004 à 14:03:06    

Voila donc un petit programme pour faire allumer des dels à la sortie du port //. Pour cela on utilise du code asm.
On arrive pas a compiler ce programme avec devcpp et visual studio...  
voici le programme :
:bounce:  
 

Code :
  1. #include <iostream.h>
  2. void ecrire(unsigned short adr,char out_char);
  3. void ecrire(unsigned short adr,char out_char)
  4. {
  5.         asm
  6.         {
  7.                 mov al,out_char
  8.                 mov dx,adr
  9.                 out dx,al
  10.         }
  11. }
  12. int main()
  13. {
  14. int nbr;
  15. cout << "Nombre : ";
  16. cin >> nbr;
  17. ecrire(0X0378,nbr);
  18.         return 0;
  19. }


 
et voici le log d'erreur...

Citation :

Compilateur: Default compiler
Building Makefile: "E:\LTELEC\PPCP\Tous les dossiers\liaison pc plan\Programme de test\Source\projet cpp\Makefile.win"
Exécution de  make...
make.exe -f "E:\LTELEC\PPCP\Tous les dossiers\liaison pc plan\Programme de test\Source\projet cpp\Makefile.win" all
g++.exe -c main3.cpp -o main3.o -I"C:/Dev-Cpp/include/c++/3.3.1"  -I"C:/Dev-Cpp/include/c++/3.3.1/mingw32"  -I"C:/Dev-Cpp/include/c++/3.3.1/backward"  -I"C:/Dev-Cpp/lib/gcc-lib/mingw32/3.3.1/include"  -I"C:/Dev-Cpp/include"    
 
In file included from C:/Dev-Cpp/include/c++/3.3.1/backward/iostream.h:31,
                 from main3.cpp:1:
 
C:/Dev-Cpp/include/c++/3.3.1/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <sstream> instead of the deprecated header <strstream.h>. To disable this warning use -Wno-deprecated.
main3.cpp: In function `void ecrire(short unsigned int, char)':
main3.cpp:8: error: syntax error before `{' token
 
make.exe: *** [main3.o] Error 1
 
Exécution terminée


 
donc si vous savez d'ou sa vien merci de me le dire :)


---------------
Créer son forum gratuit |  Mon beau blog phpBB caÿ le mal :o
Reply

Marsh Posté le 18-10-2004 à 14:03:06   

Reply

Marsh Posté le 18-10-2004 à 14:08:46    

deja c'est #include <iostream> et pas #include <iostream.h>
 
et ensuite si tu veux acceder au port // utilise les fonctions de l'api windows, pas ton code asm qui risque de faire prout (pour cause de protection)


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 18-10-2004 à 14:11:10    

cad ? comment faire autrement que en utilisant du asm ? tu as un lien vers doc pour ces API ? merci


---------------
Créer son forum gratuit |  Mon beau blog phpBB caÿ le mal :o
Reply

Marsh Posté le 18-10-2004 à 14:11:52    

heuh ben msdn.microsoft.com ([:itm]) et sinon fais une recherche sur ce meme forum, la question revient assez frequemment


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 18-10-2004 à 14:11:56    

Déjà pour le warning tu peux remplacer
 

Code :
  1. #include <iostream.h>


 
par
 

Code :
  1. #include <iostream>
  2. using namespace std;


 
Ensuite, je ne connais pas l'assembleur, mais dans un de mes livres où il y a des passages en assembleur je vois un __asm {} à la place ton asm {}. Ca peut peut-être aider :D Je sais pas ;)

Reply

Marsh Posté le 18-10-2004 à 14:13:47    

déjà aprés tes modifications c'est bien mieux, il y a moins de problèmes à la compilation.
 

Citation :

Compilateur: Default compiler
Building Makefile: "E:\LTELEC\PPCP\Tous les dossiers\liaison pc plan\Programme de test\Source\projet cpp\Makefile.win"
Exécution de  make...
make.exe -f "E:\LTELEC\PPCP\Tous les dossiers\liaison pc plan\Programme de test\Source\projet cpp\Makefile.win" all
g++.exe -c main3.cpp -o main3.o -I"C:/Dev-Cpp/include/c++/3.3.1"  -I"C:/Dev-Cpp/include/c++/3.3.1/mingw32"  -I"C:/Dev-Cpp/include/c++/3.3.1/backward"  -I"C:/Dev-Cpp/lib/gcc-lib/mingw32/3.3.1/include"  -I"C:/Dev-Cpp/include"    
 
main3.cpp: In function `void ecrire(short unsigned int, char)':
main3.cpp:10: error: syntax error before `{' token
 
make.exe: *** [main3.o] Error 1
 
Exécution terminée


Message édité par scull le 18-10-2004 à 14:15:17

---------------
Créer son forum gratuit |  Mon beau blog phpBB caÿ le mal :o
Reply

Marsh Posté le 18-10-2004 à 14:26:02    

tu pourrais me dire quel api je dois utiliser si c'est pas trop te demander ;)


---------------
Créer son forum gratuit |  Mon beau blog phpBB caÿ le mal :o
Reply

Marsh Posté le 18-10-2004 à 14:29:27    

scull a écrit :

déjà aprés tes modifications c'est bien mieux, il y a moins de problèmes à la compilation.
 

Citation :

Compilateur: Default compiler
Building Makefile: "E:\LTELEC\PPCP\Tous les dossiers\liaison pc plan\Programme de test\Source\projet cpp\Makefile.win"
Exécution de  make...
make.exe -f "E:\LTELEC\PPCP\Tous les dossiers\liaison pc plan\Programme de test\Source\projet cpp\Makefile.win" all
g++.exe -c main3.cpp -o main3.o -I"C:/Dev-Cpp/include/c++/3.3.1"  -I"C:/Dev-Cpp/include/c++/3.3.1/mingw32"  -I"C:/Dev-Cpp/include/c++/3.3.1/backward"  -I"C:/Dev-Cpp/lib/gcc-lib/mingw32/3.3.1/include"  -I"C:/Dev-Cpp/include"    
 
main3.cpp: In function `void ecrire(short unsigned int, char)':
main3.cpp:10: error: syntax error before `{' token
 
make.exe: *** [main3.o] Error 1
 
Exécution terminée




tu as remplacé asm par __asm?


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 18-10-2004 à 14:30:32    

Oui, mais rien à faire sa compile pas


---------------
Créer son forum gratuit |  Mon beau blog phpBB caÿ le mal :o
Reply

Marsh Posté le 18-10-2004 à 14:32:27    

ah mais attends, tu fais du gcc, doncques en gcc si je ne m'abuse il faut utiliser l'odieuse syntaxe AT&T pour l'asm, plus tout un ot tas de bordel pas bo.  
(sinon dsl je sais pu ou il faut regarder pour le // sous win, jamais utiliser ce truc..)


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 18-10-2004 à 14:32:27   

Reply

Marsh Posté le 18-10-2004 à 14:33:49    

scull a écrit :

Oui, mais rien à faire sa compile pas


et sous visual studio?


Message édité par skeye le 18-10-2004 à 14:33:55

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 18-10-2004 à 14:36:17    

non plus, c'est une trés vieille version de visual...
en fait, il comprend pas nos fonctions "ecrire"...


---------------
Créer son forum gratuit |  Mon beau blog phpBB caÿ le mal :o
Reply

Marsh Posté le 18-10-2004 à 14:48:38    

et si finallement j'utilise pas de asm ? comment je pourrais faire ? en C++ seul ?


---------------
Créer son forum gratuit |  Mon beau blog phpBB caÿ le mal :o
Reply

Marsh Posté le 19-10-2004 à 17:56:06    

bon ben scull, à mon avis on est dans la galere!!!, serait-il possible de nous en dire plus sur lapi pour progrommer notre port // merci
(¯`·.¸¸.->

Reply

Marsh Posté le 19-10-2004 à 19:09:06    

msdn, search, parallel, write, 4ème réponse:
http://msdn.microsoft.com/library/ [...] 91.xml.asp

Reply

Marsh Posté le 21-10-2004 à 13:28:23    

hum... et si on essaye de compiler tout sa sous nux sa pourrait marcher ?

Reply

Marsh Posté le 21-10-2004 à 13:29:05    

scull a écrit :

hum... et si on essaye de compiler tout sa sous nux sa pourrait marcher ?


non.
 
[edit]
 
Jamais utilisé, mais ça fait partie du windows DDK d'après la doc, donc peu de chances...de tte manière l'accès aux périphs en général ne se fera pas de la même manière sur 2 OS différents.


Message édité par skeye le 21-10-2004 à 13:30:19

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 21-10-2004 à 13:34:34    

le truc en fait, c'est que ce prog il a était fait l'année dernière par un pote. A la base c t pour marcher sur un win 95. Là on a tester de compiler sa source sur un visual basic sous win 95 et sur un devcpp sur winXP.
Sans avoir modifier le code source du programme, il me trouve plein de bug... Pourtant je sais que son appli marche, puisque j'ai un .exe qui marche...
 
Je pense que c impossible mais pourrait t'on retrouver le code source du .exe ?...

Reply

Marsh Posté le 21-10-2004 à 13:40:48    

voila donc aprés quelques petites modifs sur le prog. Il reste plus qu'une seule erreur...
 

Citation :

void ecrire(unsigned short adr,char out_char)
{
        asm
        {
                mov al,out_char
                mov dx,adr
                out dx,al
        }
}

Voilà on approche du but...
mais c'est toujours l'asm qui bug....


Message édité par scull le 21-10-2004 à 13:41:21

---------------
Créer son forum gratuit |  Mon beau blog phpBB caÿ le mal :o
Reply

Marsh Posté le 21-10-2004 à 13:54:41    

scull a écrit :

voila donc aprés quelques petites modifs sur le prog. Il reste plus qu'une seule erreur...
 

Citation :

void ecrire(unsigned short adr,char out_char)
{
        asm
        {
                mov al,out_char
                mov dx,adr
                out dx,al
        }
}

Voilà on approche du but...
mais c'est toujours l'asm qui bug....


l'instruction "out" envoie une donnée sur un port matériel, donc selon ton OS, elle ne sera pas acceptée (noyau NT)
=> écrire un driver ou passer par l'API


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 21-10-2004 à 19:19:15    

Outre ce qu'a dit Harkonnen, dans le cas où tu compilerais ton programme pour dos et que tu le lancerais sous dos (ou un émulateur), ton code asm est en syntaxe MASM (Microsoft), et en plus c'est de l'inline, donc c'est fait pour VC++. Pas du tout pour gcc. Et ton "unique" erreur est simplement que gcc ne considère pas le token "asm" de la même façon que VC++ (il attend '(' après et pas '{').
La syntaxe gcc (donc GAS: Gnu ASsembler) est complètement différente. Tu peux utiliser directement un registre ou laisser gcc optimiser l'utilisation et donc demander un type de registre uniquement. Exemple de truc possible dans ton cas, sans optimisation d'utilisation de registres (ça fait un millénaire que j'en ai plus fait, donc c'est pas du tout dit que ça compile):
 

Code :
  1. void ecrire(unsigned short adr, char out_char)
  2. {
  3.   asm volatile
  4.   ("
  5.     out   %%al, %%dx
  6.   ":
  7.    : "dx" (adr), "al" (out_char)
  8.    :
  9.   );
  10. }


 
Attention c'est dans l'autre sens les opérations (src -> dest). Quoique pour out je sois pas sûr.
Voir par exemple (au pif): http://www-106.ibm.com/developerwo [...] /l-ia.html
Tout est expliqué là-dessus. Y'a des tas de liens, tapes "gcc asm inline" dans google.


Message édité par g012 le 21-10-2004 à 19:20:26
Reply

Marsh Posté le 22-10-2004 à 10:44:14    

Merci bien G012 mais on a toujours ce probleme de "token" même avec ta commande
[cpp]
Compilateur: Default compiler
Building Makefile: "E:\LTELEC\PPCP\Tous les dossiers\liaison pc plan\Programme de test\Source\projet cpp\Makefile.win"
Exécution de  make...
make.exe -f "E:\LTELEC\PPCP\Tous les dossiers\liaison pc plan\Programme de test\Source\projet cpp\Makefile.win" all
g++.exe -c "essaie compile ben/main5.cpp" -o "essaie compile ben/main5.o" -I"C:/Dev-Cpp/include/c++/3.3.1"  -I"C:/Dev-Cpp/include/c++/3.3.1/mingw32"  -I"C:/Dev-Cpp/include/c++/3.3.1/backward"  -I"C:/Dev-Cpp/lib/gcc-lib/mingw32/3.3.1/include"  -I"C:/Dev-Cpp/include"    
 
essaie compile ben/main5.cpp:9:12: missing terminating " character
essaie compile ben/main5.cpp: In function `void ecrire(short unsigned int,  
   char)':
essaie compile ben/main5.cpp:10: error: syntax error before `%' token
 
essaie compile ben/main5.cpp:11:3: missing terminating " character
 
make.exe: *** ["essaie] Error 1
 
Exécution terminée

Reply

Marsh Posté le 22-10-2004 à 12:21:36    

Code :
  1. asm volatile
  2.    ("out   %%al, %%dx":
  3.     : "dx" (adr), "al" (out_char)  );


 
On ne met pas le dernier : s'il est vide, et en C++, tout guillemet doit être fermé dans la même ligne.
 
En plus, avec g++ 3, il n'est plus authorisé de mettre les registres d'entrée ou de sortie parmi les clobber...

Reply

Marsh Posté le 22-10-2004 à 20:10:00    

merci lam's je vais essayer

Reply

Marsh Posté le 22-10-2004 à 23:04:24    

lol rafale30 >>> vive les vacances
 
pourtant je me rapel bien de ce g++.exe ...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed