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

x86 16-bits Assembleur Discussion :

Écrire un algorithme en Assembleur 16 bits


Sujet :

x86 16-bits Assembleur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 65
    Par défaut Écrire un algorithme en Assembleur 16 bits
    Bonjour,

    Je veux écrire cet algorithme en assembleur mais je n'ai pas réussi.

    voila l'algo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Algo Calc
    var a,b,x : entier
    debut
    ecrire ("entrer le premier chiffre :")
    lire (a)
    ecrire ("entrer le deuxieme chiffre :")
    lire (b)
    x<--a
    a<---b
    b<---x
    ecrire( "la valeur du premier chiffre est :" a)
    ecrire( "la valeur du deuxieme chiffre est :" b)
    Fin
    et voila ma solution :

    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
    .model small
     
    .stack 100
     
    .data
    o1 db 0ah,0dh,'chiffre 1:$'
    o2 db 0ah,0dh,'chiffre 2:$'
     
    .data ?
     
    num1 db ?
    num2 db ?
    x db ?
     
    .code
    start:
     
    mov ax,@data
    mov ds,ax
    mov es,ax
     
    lea dx,o1
    mov ah,9
    int 21h
     
    mov ah,1
    int 21h
     
    mov num1,al
     
    lea dx,o2
    mov ah,9
    int 21h
     
    mov ah,1
    int 21h
     
    mov num2,al
     
     
    mov dx,num1
    mov x,dx
     
    mov dx,num2
    mov num1,dx
     
    mov dx,x
    mov num2,dx
     
     
    lea dx, num1
    mov ah, 9
    int 21h
     
    lea dx, num2
    mov ah, 9
    int 21h
     
    mov ax, 4c00h
    int 21h
    end start
    Il y a des fautes a l'exécution :

    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
    C:\masm>masm calc;
    پأS±سë¸ Hح!rD‹èژہ¹D3ے¾*َ¤‹×ں3ہ¾*I|$‹ظè„ü‹—*+ض&‰‹— - 1256,
    Microsoft ® Macro Assembler Version 5.10
    Copyright © Microsoft Corp 1981, 1988. All rights reserved.
     
    calc.ASM(10): error A2063: Operand combination illegal
    calc.ASM(30): error A2068: Cannot address with segment register
    calc.ASM(39): error A2068: Cannot address with segment register
    calc.ASM(42): error A2068: Cannot address with segment register
    calc.ASM(43): error A2068: Cannot address with segment register
    calc.ASM(45): error A2068: Cannot address with segment register
    calc.ASM(46): error A2068: Cannot address with segment register
    calc.ASM(48): error A2068: Cannot address with segment register
    calc.ASM(49): error A2068: Cannot address with segment register
     
    48776 + 446035 Bytes symbol space free
     
    0 Warning Errors
    9 Severe Errors
     
    C:\masm>
    Qui peut m'aider, s'il-vous-plaît ?

    Merci d'avance.

  2. #2
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 65
    Par défaut
    Enfin j'ai réussi voila le code en asm

    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
    .model small
     
    .stack 100
     
    .data
    in1 db 0ah,0dh,'Entrer le numero 1:$'
    in2 db 0ah,0dh,'Entrer le numero 2:$'
    pkey db 0ah,0dh,'click sur une touche pour quitter...$'
    out1 db 0ah,0dh,'Numero 1 est:'
    num1 db 00h,24h
    out2 db 0ah,0dh,'Numero 2 est:'
    num2 db 00h,24h
     
     
    .code
    start:
     
    mov ax,@data
    mov ds,ax
    mov es,ax
     
     
    lea dx,in1
    mov ah,9
    int 21h
     
    mov ah,1
    int 21h
     
    mov num1,al
     
    lea dx,in2
    mov ah,9
    int 21h
     
    mov ah,1
    int 21h
     
    mov num2,al 
     
    mov bl,num1
    mov cl,num2
    xchg bl,cl
    mov num1,bl
    mov num2,cl
     
    lea dx, out1
    mov ah, 9
    int 21h
     
    lea dx, out2
    mov ah, 9
    int 21h
     
    lea dx, pkey
    mov ah, 9
    int 21h
     
    mov ah,1
    int 21h
     
    mov ax, 4c00h
    int 21h
    end start
    le probleme maintenent c'est de verifier si l etulisateur a entrer un numero ou un char
    si num1 = char alors saute a un message et la meme chose avec num2

    comment faire ça ?

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 485
    Par défaut
    Citation Envoyé par xweb-10 Voir le message
    si num1 = char alors saute a un message et la meme chose avec num2 comment faire ça ?
    Ça, c'est à toi de le définir. Il faut que saches toi-même ce qui distingue un chiffre d'autres choses.

    À l'issue de INT 21h AH=01, tu récupère en principe le caractère saisi dans AL. Il te suffit de vérifier si sa valeur est celle du code d'un chiffre, donc '0' à '9', soit en ASCII 030h à 039h.

  4. #4
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 65
    Par défaut
    Oui C'est ça , mais je sais pas comment faire la comparaison

  5. #5
    Membre Expert
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Par défaut
    Une idée comme ça en passant (c'est comme ça que je fais)
    - récupérer le code ASCII dans un registre
    - enlever 48 à cette valeur (code ASCII de 0)
    - si nouvelle valeur >9 (en non signé) alors ce n'est pas un nombre

    a+ François

  6. #6
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 65
    Par défaut
    merci à vous ! Maintenant ca fonctionne bien

    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
    .model small
     
    .stack 100
     
    .data
    in1 db 0ah,0dh,'Entrer le numero 1:$'
    in2 db 0ah,0dh,'Entrer le numero 2:$'
    err db 0ah,0dh,' erreur : entrer un numero valide $'
    pkey db 0ah,0dh,'click sur une touche pour quitter...$'
    out1 db 0ah,0dh,'Numero 1 est:'
    num1 db 00h,24h
    out2 db 0ah,0dh,'Numero 2 est:'
    num2 db 00h,24h
     
     
    .code
    start:
     
    mov ax,@data
    mov ds,ax
    mov es,ax
     
     
    lea dx,in1
    mov ah,9
    int 21h
     
    mov ah,1
    int 21h
     
    mov num1,al
     
    mov ah,al
    sub ah,48
    cmp ah,9
    jg erreur
     
    lea dx,in2
    mov ah,9
    int 21h
     
    mov ah,1
    int 21h
     
    mov num2,al 
     
    mov ah,al
    sub ah,48
    cmp ah,9
    jg erreur
     
    mov bl,num1
    mov cl,num2
    xchg bl,cl
    mov num1,bl
    mov num2,cl
     
    lea dx, out1
    mov ah, 9
    int 21h
     
    lea dx, out2
    mov ah, 9
    int 21h
     
    lea dx, pkey
    mov ah, 9
    int 21h
     
    mov ah,1
    int 21h
     
    erreur:
    lea dx,err
    mov ah,9
    int 21h
     
    mov ah,1
    int 21h
     
    mov ax, 4c00h
    int 21h
    end start

    mais j'ai pas compris pourquoi on a fait

    ( chiffre entré - 48 ) si le resulta et > 9 alors c 'est pas un nombre

    pourquoi on a pas fait - 3A ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Où écrire un algorithme (notepad, word...)
    Par monique anciaux dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 13/09/2010, 11h38
  2. Intégrer un programme en Assembleur 16 bits en C++
    Par Zarokk dans le forum Assembleur
    Réponses: 3
    Dernier message: 16/05/2007, 09h40
  3. Assembleur 32 bits
    Par monromero dans le forum x86 32-bits / 64-bits
    Réponses: 1
    Dernier message: 30/04/2007, 16h33
  4. [16F84A] Algorithme pour décoder 4 bits en 16 flags
    Par drache dans le forum Autres architectures
    Réponses: 4
    Dernier message: 16/05/2006, 18h53

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