Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1

    Inscrit en
    juin 2009
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : juin 2009
    Messages : 40
    Points : -1
    Points
    -1

    Par défaut Problème avec un exercice assembleur : NASM et interruption DOS 21h

    Bonsoir,

    Dans un exercice d'un TP d'assembleur avec Nasm et l'interruption DOS 21h sous Windows, Il est demandé d’écrire un programme qui affiche la question « somme-nous en fin d'après-midi (o/n) ? ».

    Le programme lit ensuite une touche au clavier et, selon la réponse de l'utilisateur, affiche le message « allez, in faut rentrer chez soi ». Si la réponse est « o » ou « courage, on a encore beaucoup de chose a faire ! ». Si c'est « n », donc ma réponse est la suite :

    Code :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    Programme Exercice 1 - 2
     
    segment .data
    	msg     DB 'Sommes-nous en fin d apres midi (O/N) ?' ,13,10,'$'
    	msg1    DB 'Allez il faut rentrer chez soi !' ,13,10,'$'
    	msg2    DB 'Courage, on a encore beaucoup de choses a faire' ,13,10,'$'
    	msg3    DB 'Vous avez tapez un choix errone' ,13,10,'$'
     
     
    segment .text
     
     
    ; nasm -f bin ex.asm -o ex.com
    ; .\ex
     
     
      enter 0,0
      pusha
     
     
    MAIN:  
        mov AH,09h
        mov DX, msg
        int 21h
     
     
     
    LECTURE:
     
        mov AH,01h
    	int 21h
     
    	CMP AL,'o'
    	JE  MSG_1
     
    	CMP AL,'n'
    	JE  MSG_2
     
    	JMP MSG_3
     
     
    MSG_1:
        mov AH,09h
        mov DX, msg1
        int 21h           
     
     
    MSG_2:
        mov AH,09h
        mov DX, msg2
        int 21h
     
     
    MSG_3:
        mov AH,09h
        mov DX, msg3
        int 21h
        JMP LECTURE
     
    FIN:
     
    popa
    mov eax,0
    leave
    ret
    Le problème est que, à chaque fois que je tape « o » ou « n » seul, donc pas d'entrée, il revient à « sommes-nous en fin d après-midi (o/n) ? ».

    Merci de m'indiquer ma faute ou me donner une solution avec l'interruption 21h, fonction 01h.

    Merci beaucoup.

  2. #2
    Membre Expert
    Avatar de Forthman
    Homme Profil pro François
    conception mécanique
    Inscrit en
    janvier 2005
    Messages
    506
    Détails du profil
    Informations personnelles :
    Nom : Homme François
    Âge : 39
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2005
    Messages : 506
    Points : 1 107
    Points
    1 107

    Par défaut

    Bonjour,

    à la fin de tes sous programmes MSG_1 et MSG_2 Il te faut un JMP FIN
    (ou un saut vers un sous programme qui attend à nouveau une touche pour avoir
    le temps de lire le message car la fenêtre sous win$ va se fermer de suite)

    a+ François

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •