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 :

Correction de programme


Sujet :

Assembleur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2
    Par défaut Correction de programme
    Bonjour à tous,

    Voilà je vous explique mon petit-énorme problème. Je commence à peine a programmer en Assembleur et j'aurais bien voulu faire un programme qui convertit le décimal (0 à 255) en binaire pour m'entraîner... mais voilà, c'est un échec total et cuisant !
    Si quelqu'un pourrait y jeter un oeil et corriger mes erreurs pour que ce programme fonctionne.

    MERCI beaucoup !
    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
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    DOSSEG 
    .model small 
    .stack 100h 
    .DATA 
    texte1 db 13,10, "Entrer un chiffre entre 0 et 255$" 
    texte2 db 13,10, "Votre chiffre en binaire est:*$" 
    var1 db ? 
    var2 db ? 
    var3 db ? 
    var4 db ? 
    var5 db ? 
    var6 db ? 
    var7 db ? 
    var8 db ? 
    var9 db ? 
    var10 db 8 dup(1) 
     
    .CODE 
    mov ax,@data 
    mov ds,ax 
    mov dx,offset texte1 
    mov ah,09h 
    int 21h 
     
    mov ah,01h 
    int 21h 
    mov var1,al 
    jp paire1 
    mov al,var1 
    div ax,2 
    mov var2,al 
    jp paire2 
    mov al,var2 
    div ax,2 
    mov var3,al 
    jp paire3 
    mov al,var3 
    div ax,2 
    mov var4,al 
    jp paire4 
    mov al,var4 
    div ax,2 
    mov var5,al 
    jp paire5 
    mov al,var5 
    div ax,2 
    mov var6,al 
    jp paire6 
    mov al,var6 
    div ax,2 
    mov var7,al 
    jp paire7 
    mov al,var7 
    div ax,2 
    mov var8,al 
    jp paire8 
    mov al,var8 
    div ax,2 
    mov var9,al 
     
     
    paire1: mov var10+7,0 
    ret 
    paire2: mov var10+6,0 
    ret 
    paire3: mov var10+5,0 
    ret 
    paire4: mov var10+4,0 
    ret 
    paire5: mov var10+3,0 
    ret 
    paire6: mov var10+2,0 
    ret 
    paire7: mov var10+1,0 
    ret 
    paire8: mov var10,0 
    ret 
     
    mov dx,offset texte2 + var10 
    mov ah,09h 
    int 21h 
     
    mov ah,4Ch 
    int21h 
     
    END
    PS: Pas rire!!!!

  2. #2
    mat.M
    Invité(e)
    Par défaut
    Briêvement pour répondre il faut dans une boucle charger la valeur rentrée dans un registre par exemple AX et faire un masque logique avec AND.
    Il est peut-être nécessaire de faire des rotations avec ROR ou ROL.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2
    Par défaut
    D'accord , mais y a vraiment rien de bon dans ce que j ai fait ?
    J'aimerai savoir pk ca marche pas !

  4. #4
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    8 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 049
    Billets dans le blog
    2
    Par défaut
    Bonjour !
    Citation Envoyé par Thesilverking
    D'accord , mais y a vraiment rien de bon dans ce que j ai fait ?
    J'aimerai savoir pk ca marche pas !
    En fait, tu ne peux utiliser l'instruction jp pour tester la parité après une instruction mov car celle-ci n'affecte pas le parity flag.

    Dans la série de labels paire1:, paire2:... tu utilises à mauvais escient l'instruction ret. Tu dois plutôt créer un label Fin: et faire un saut vers celui-ci :
    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
    ...
    paire6: mov var10+2,0 
    jmp short Fin
    paire7: mov var10+1,0
    jmp short Fin
    paire8: mov var10,0
     
    Fin:
    mov dx,offset texte2 + var10 
    mov ah,09h 
    int 21h 
     
    mov ah,4Ch 
    int21h 
     
    END
    Pour ton information, l'instruction ret permet de dépiler l'adresse de l'instruction suivante à la fin d'une procédure.

    Mais le plus gros problème est celui sur lequel Mat.M a mis le doigt : la méthode que tu utilises n'est pas bonne.

    Surtout que tout ceci ne te décourage pas !
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  5. #5
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 23
    Par défaut
    Si ton programme plante c'est à cause des "ret". Une instruction "ret" doit-être consécutif à une instruction "call" ou "push".

    Qui plus est ton code est une véritable usine à gaz.

    Trouve ci-après le code que j'ai écris un petit code pour convertir une valeur numérique 8 bits en une chaîne binaire ASCII.

    c'est plus compact et efficace ! De plus tu peux modifier légèrement mon programme pour convertir des valeurs 16 bits.


    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    .8086
    .MODEL TINY
    ;Convertit la valeur 175  en binaire ASCII "101001111"
     
    MonCode SEGMENT 'CODE'
     
    		ORG 100h
     
    ;Point d'entrée du programme
    Main:		      
          mov al, 175
          mov cx, 8      
          mov bx, OFFSET MaValeur
          dec bx
     
    Debut:
          mov si, cx     
          ror al, 1
          jc Add1      
          mov BYTE PTR [bx+si], 30h  ; 0
          jmp Next 
    Add1:
          mov BYTE PTR [bx+si], 31h ; 1
    Next:            
          loop Debut     
     
     
          ;Affiche la valeur à l'écran.
          inc bx
          mov ah, 9
          mov dx, bx
          int 21h      
     
          ;Fin du programme      
          mov ax, 4C00h
          int 21h
     
    	MaValeur DB 9 dup("$")
     
    MonCode ENDS
     
    END Main
    Cool, n'est-ce pas !!!

Discussions similaires

  1. [Turbo Pascal] Copier-coller un code source dans TP7 - Correction de programme
    Par pasrico dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 11/01/2012, 19h11
  2. Structurer correctement un programme
    Par ZeBen dans le forum C#
    Réponses: 18
    Dernier message: 28/06/2010, 09h39
  3. optimisation/correction de programme
    Par bolloche dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 01/07/2008, 16h08
  4. Correction de programmes simples.
    Par elishac dans le forum Caml
    Réponses: 5
    Dernier message: 10/06/2008, 20h03
  5. Correction de programme en C
    Par vg-matrix dans le forum C
    Réponses: 5
    Dernier message: 06/05/2007, 16h59

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