Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1018 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Compile pas mon asm

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Compile pas mon asm

n°875934
scull
MySCULL cay bon mangez en!
Posté le 18-10-2004 à 14:03:06  profilanswer
 

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
mood
Publicité
Posté le 18-10-2004 à 14:03:06  profilanswer
 

n°875939
chrisbk
-
Posté le 18-10-2004 à 14:08:46  profilanswer
 

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
n°875944
scull
MySCULL cay bon mangez en!
Posté le 18-10-2004 à 14:11:10  profilanswer
 

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
n°875946
chrisbk
-
Posté le 18-10-2004 à 14:11:52  profilanswer
 

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
n°875947
leto78
Posté le 18-10-2004 à 14:11:56  profilanswer
 

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 ;)

n°875948
scull
MySCULL cay bon mangez en!
Posté le 18-10-2004 à 14:13:47  profilanswer
 

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
n°875961
scull
MySCULL cay bon mangez en!
Posté le 18-10-2004 à 14:26:02  profilanswer
 

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
n°875968
skeye
Posté le 18-10-2004 à 14:29:27  profilanswer
 

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 -
n°875969
scull
MySCULL cay bon mangez en!
Posté le 18-10-2004 à 14:30:32  profilanswer
 

Oui, mais rien à faire sa compile pas


---------------
Créer son forum gratuit |  Mon beau blog phpBB caÿ le mal :o
n°875970
chrisbk
-
Posté le 18-10-2004 à 14:32:27  profilanswer
 

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
mood
Publicité
Posté le 18-10-2004 à 14:32:27  profilanswer
 

n°875971
skeye
Posté le 18-10-2004 à 14:33:49  profilanswer
 

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 -
n°875973
scull
MySCULL cay bon mangez en!
Posté le 18-10-2004 à 14:36:17  profilanswer
 

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
n°875984
scull
MySCULL cay bon mangez en!
Posté le 18-10-2004 à 14:48:38  profilanswer
 

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
n°877250
rafale30
Posté le 19-10-2004 à 17:56:06  profilanswer
 

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
(¯`·.¸¸.->

n°877302
_darkalt3_
Proctopathe
Posté le 19-10-2004 à 19:09:06  profilanswer
 

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

n°878823
scull
MySCULL cay bon mangez en!
Posté le 21-10-2004 à 13:28:23  profilanswer
 

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

n°878826
skeye
Posté le 21-10-2004 à 13:29:05  profilanswer
 

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 -
n°878832
scull
MySCULL cay bon mangez en!
Posté le 21-10-2004 à 13:34:34  profilanswer
 

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 ?...

n°878837
scull
MySCULL cay bon mangez en!
Posté le 21-10-2004 à 13:40:48  profilanswer
 

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
n°878845
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 21-10-2004 à 13:54:41  profilanswer
 

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)
n°879353
g012
Posté le 21-10-2004 à 19:19:15  profilanswer
 

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
n°879802
rafale30
Posté le 22-10-2004 à 10:44:14  profilanswer
 

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

n°879923
Lam's
Profil: bas.
Posté le 22-10-2004 à 12:21:36  profilanswer
 

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...

n°880336
rafale30
Posté le 22-10-2004 à 20:10:00  profilanswer
 

merci lam's je vais essayer

n°880470
scull
MySCULL cay bon mangez en!
Posté le 22-10-2004 à 23:04:24  profilanswer
 

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

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Compile pas mon asm

 

Sujets relatifs
Executer du code compilé...pourquoi ce code ne compile pas ? (MACOSX user asked)
Impossible de créer l'en-tête pré-compilé : code dans l'en-têteComposition de Filtre Digitaux en compile-time [RESOLU]
[ORACLE] Trigger bien compilé qui ne marche pas bien[CPP] Ca compile mais ca marche pas ... pb de gros n00b
ah compile pas !!!!!!!!!!!!Code C compilé sous Visual c++ 6 : prob de perfs...
[VC++] Ca ne compile pas et pourtant, c'est pas sorcier...[C++] Ca compile mais erreur au lancement du exe...
Plus de sujets relatifs à : Compile pas mon asm


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR