IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Assembleur Discussion :

Intégrer un programme en Assembleur 16 bits en C++


Sujet :

Assembleur

  1. #1
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Intégrer un programme en Assembleur 16 bits en C++
    Bonjour a tous.

    J'ai écris un programme en assembleur (un pseudo tetris en fait)
    Je le fais tourner sous DosBox (les int 10h n'étant pas permis avec MASM)

    J'aurais voulu que la légendaire musique du jeu tourne pendant l'execution du programme, mais après moult recherches j'ai abandonné cette idée.

    Mais j'ai vu qu'avec SDL (je crois, enfin plus generalement avec le C++) on pouvais facilement tourner des musiques.
    J'aurais donc voulu lancer la musique puis executer le code assembleur en tant que sous programme.

    J'ai vu qu'avec la syntaxe :
    _asm {}
    on pouvait integrer du code en assembeur, mais evidemment en copiant mon code en entier ça n'a pas marché du tout, mais ce qui m'a étonné c'est que même une instruction de base telle que :
    MOV AH,09h
    ne passait pas.

    J'aimerais donc savoir les trucs qui passent et les trucs qui ne passent pas.
    Et si vous connaissez n'importe quoi qui pourrait m'avancer je suis preneur
    Ou même s'il est possible de mettre une commande dans le code du genre :
    "Executer le programme :"

    merci d'avance
    et bonne continuation

    pS : je n'ai pas juger utile de mettre le code ici, vu qu'il fais + de 5000 lignes, mais je precise que j'utilise une pile, des macros, des procedures et beaucoup de variables (au cas ou ça entrainerai des problemes de compatibilité)

    et si vous avez des précisions a connaitre la dessus je me ferais un plaisir de vous repondre
    a+

  2. #2
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par Zarokk
    J'ai vu qu'avec la syntaxe :
    _asm {}
    on pouvait integrer du code en assembeur, mais evidemment en copiant mon code en entier ça n'a pas marché du tout, mais ce qui m'a étonné c'est que même une instruction de base telle que :
    MOV AH,09h
    ne passait pas.

    C'est normal, ça n'utilise pas tout à fait cette syntaxe.

    Compile une application avec -S (dans gcc) pour voir la forme.

    Sous linux, x86 par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int f(void)
    {
      return 3;
    }
     
    int g(void)
    {
      int i = f();
     
      return (i+45);
     
    }
    devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    .globl f
    	.type	f, @function
    f:
    	pushl	%ebp
    	movl	%esp, %ebp
    	movl	$3, %eax
    	popl	%ebp
    	ret
    	.size	f, .-f
    .globl g
    	.type	g, @function
    g:
    	pushl	%ebp
    	movl	%esp, %ebp
    	subl	$4, %esp
    	call	f
    	movl	%eax, -4(%ebp)
    	movl	-4(%ebp), %eax
    	addl	$45, %eax
    	leave
    	ret
    Et avec un compilateur C++, c'est un peu différent à cause du mangling :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    .globl _Z1fv
    	.type	_Z1fv, @function
    _Z1fv:
    .LFB2:
    	pushl	%ebp
    .LCFI0:
    	movl	%esp, %ebp
    .LCFI1:
    	movl	$3, %eax
    	popl	%ebp
    	ret
    .LFE2:
    	.size	_Z1fv, .-_Z1fv
    .globl __gxx_personality_v0
    	.align 2
    .globl _Z1gv
    	.type	_Z1gv, @function
    _Z1gv:
    .LFB3:
    	pushl	%ebp
    .LCFI2:
    	movl	%esp, %ebp
    .LCFI3:
    	subl	$16, %esp
    .LCFI4:
    	call	_Z1fv
    	movl	%eax, -4(%ebp)
    	movl	-4(%ebp), %eax
    	addl	$45, %eax
    	leave
    	ret

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 949
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 949
    Points : 5 663
    Points
    5 663
    Par défaut
    Kio,
    Citation Envoyé par millie
    C'est normal, ça n'utilise pas tout à fait cette syntaxe.
    Ça dépend directement du compilateur.

  4. #4
    Membre régulier
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 255
    Points : 100
    Points
    100
    Par défaut
    Bonjour,

    J'en profite pour poser une question puisque j'essai aussi d'intégrer de l'assembleur dans un programme C mais j'ai des erreurs.

    En fait j'ai fait le code assembleur sous EMU8086 (emulateur 8086) et il fonctionne parfaitement.
    Le problème c'est que j'utilise beaucoup d'adresses mémoire du genre mov ah,[1200h], mov bl,[1202h], etc...
    J'ai entre autre l'erreur "type d'opérande incorrecte" à chaque fois qu'il trouve une adresse.
    J'utilise Visual C++ 2003.

    Merci.

Discussions similaires

  1. Les outils que vous utilisez pour programmer en assembleur
    Par Smortex dans le forum x86 32-bits / 64-bits
    Réponses: 36
    Dernier message: 15/08/2022, 11h28
  2. Un programme en assembleur qui indique le bit de parité
    Par bsamah dans le forum Assembleur
    Réponses: 3
    Dernier message: 21/02/2006, 13h32
  3. intégrer un programme au shell windows
    Par koolway dans le forum Windows
    Réponses: 7
    Dernier message: 30/10/2005, 19h30
  4. Comment intégrer un programme Delphi dans CBuilder
    Par Xavier dans le forum C++Builder
    Réponses: 5
    Dernier message: 21/07/2005, 20h23
  5. EDI pour intégrer efficacement de l'assembleur dans du C/C++
    Par Selenite dans le forum Choisir un environnement de développement
    Réponses: 2
    Dernier message: 04/04/2004, 18h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo