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 :

[AsmEditor] Erreur à la compilation


Sujet :

Assembleur

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut [AsmEditor] Erreur à la compilation
    Bonjour,je suis étudiant en 1ere année de DUT Informatique.
    Je viens d'installer Fasm et AsmEditor,j'ai voulu compiler un programme que j'ai fait en cours mais j'ai un message d'erreur avec AsmEditor que je n'ai pas eu en cours,voila le code source du programme (qui affiche un message,faut pas m'en demandez trop je débute ) :

    ;********************************************************
    ;ecrire un message a l'ecran
    ;********************************************************
    CSEG SEGMENT
    ASSUME CS:CSEG, DS:CSEG, ES:CSEG
    ORG 100H
    ;********************************************************
    MAIN: MOV BX,0001H
    LEA DX,MESSAGE
    MOV CX,L_MESSAGE
    MOV AH,40H
    INT 21H
    MOV AH,4CH
    INT 21H

    ;***********déclaration des variables**********

    MESSAGE DB "Bonjour, voici un message !",0DH,0AH
    L_MESSAGE EQU $-MESSAGE


    CSEG ENDS

    END MAIN
    ;*****************************fin de programme


    c'est sur CSEG SEGMENT que j'ai l'erreur,est ce que vous savez pourquoi?

  2. #2
    Membre habitué Avatar de Nico*3-3
    Inscrit en
    Octobre 2004
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 164
    Points : 145
    Points
    145
    Par défaut
    Bonjour et bienvenue !

    Ce n'est pas compliqué : Il y a plusieurs compilateurs permettant de programmer en assembleur (TASM, MASM, NASM, FASM...).
    Le problème, c'est que ces compilateurs ont une syntaxe légèrement différente.
    En fait, d'après la syntaxe utilisée, le compilateur que vous utilisez en cours est TASM ou MASM.
    Ces deux compilateurs ont presque la même syntaxe, de même que NASM et FASM ont aussi presque la même syntaxe.

    Or, toi, tu compiles avec FASM, il est donc normal que tu ais plein d'erreurs à la compilation...

    Les différences fondamentales entre FASM/NASM et TASM/MASM sont celles-ci :

    - Dans N/FASM, pas de assume
    - Surtout : Lorsque tu écris "mov ax, variable", TASM mettra dans ax la valeur de 'variable' alors que FASM mettra dans ax, l'adresse de 'variable'... Pour donc avoir la valeur de 'variable' avec FASM, il faut écrire "mov ax, [variable]".

    De plus, ton code est bizarre, tu n'as pas besoin de L_MESSAGE, et tu n'as pas besoin d'utiliser cette fonction du DOS.
    Il suffit d'utiliser la fonction 09h pour afficher une chaîne de caractères, débutant à l'adresse DSX et se treminant par un '$'.

    Ensuite, il y plein d'autres petits trucs, mais le mieux est de jeter un coup d'oeil dans la doc de FASM...

    Voici donc ton programme pour qu'il fonctionne avec FASM (et simplifié):

    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
    ;******************************************************** 
    ;ecrire un message a l'ecran 
    ;******************************************************** 
    ORG 100H 
    ;******************************************************** 
    MAIN:
    MOV DX,MESSAGE ;Mettre dans DX l'adresse de MESSAGE
    MOV AH,09H 
    INT 21H 
     
    ;Le problème est que là, le programme se terminera de suite, donc tu
    ;n'aura pas le temps de voir le message...
    ;Il faut donc utiliser une fonction du DOS qui attend simplement qu'une
    ;touche soit appuyée : c'est la fonction 08h
     
    MOV AH, 08h
    INT 21h
     
    ;Et là c'est bon
     
    MOV AH,4CH 
    INT 21H 
     
    ;***********déclaration des variables********** 
     
    MESSAGE DB "Bonjour, voici un message !", '$'
     
    ;*****************************fin de programme
    Tout a une fin, sauf l'infini...
    Projet SKAN : Développement commun d'OS

    Nico*3-3

  3. #3
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Juin 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2002
    Messages : 239
    Points : 567
    Points
    567
    Par défaut
    Je suis désolé de vous contredire, Nico*3-3, mais l'usage de la fonction 40h de l'interruption 21h est plus propre que celui de la fonction 09h.

    La fonction 40h permet la re-direction, si la sortie standard n'est pas l'écran mais un fichier.

    Si le professeur de Renesis57 lui a appris l'usage de la fonction 40h, c'est qu'il y a de bonnes raisons pour cela ...

  4. #4
    Membre habitué Avatar de Nico*3-3
    Inscrit en
    Octobre 2004
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 164
    Points : 145
    Points
    145
    Par défaut
    Bon d'accord...
    Dans ce cas, on peut faire comme ça :

    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
    ;******************************************************** 
    ;ecrire un message a l'ecran 
    ;******************************************************** 
    ORG 100H 
    ;******************************************************** 
    MAIN: MOV BX,0001H 
    MOV DX,MESSAGE 
    MOV CX,[L_MESSAGE]
    MOV AH,40H 
    INT 21H 
    MOV AH,4CH 
    INT 21H 
     
    ;***********déclaration des variables********** 
     
    MESSAGE DB "Bonjour, voici un message !",0DH,0AH 
    L_MESSAGE EQU $-MESSAGE 
     
    ;*****************************fin de programme
    Voilà (c'était surtout pour montrer la syntaxe, après il suffit de transposer... )
    Par contre, il faudra peut-être remettre la fonction 08h pour que ça ne se ferme pas de suite. 8)

    Salut !
    Tout a une fin, sauf l'infini...
    Projet SKAN : Développement commun d'OS

    Nico*3-3

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Merci pour ce petit cour et pour avoir modifié le code source pour qu'il marche sous Fasm ,et pas la peine d'utiliser la fonction 08H,en cours après avoir affiché le message la fenêtre DOS affiche :"Strike a key when ready" ou un truc du même genre .

    EDIT: Si en fait pour le 2eme code source,j'ai une erreur de compilation avec:

    L_MESSAGE EQU $-MESSAGE

    Et il faut bien utiliser la fonction 08H pour voir le message (enfin avoir le temps de le voir )

Discussions similaires

  1. Erreur de compilation après modification du Uses
    Par DevelOpeR13 dans le forum Langage
    Réponses: 5
    Dernier message: 30/10/2007, 14h23
  2. Réponses: 2
    Dernier message: 23/09/2003, 14h32
  3. Réponses: 10
    Dernier message: 22/09/2003, 21h58
  4. Réponses: 4
    Dernier message: 27/08/2003, 21h34
  5. Réponses: 2
    Dernier message: 04/03/2003, 23h24

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