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 :

SOS rectification pour un code


Sujet :

x86 16-bits Assembleur

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 98
    Points : 39
    Points
    39
    Par défaut SOS rectification pour un code
    bonjour,j'ai écrit un programme qui permet de créer un tableau de 20 cases et de trouver la moyenne et le max mais en assemblant avec tasm32 j'ai eu des erreurs que je n'ai pas pu résoudre si vous pouvez m'aider
    voici le code :
    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
    .386
    .model small	
    .stack 100h	
    .data
    phrase db 10,13,"Nous avons besoin de l'age de 20 individus pour commencer$"
    phrase1 db 10,13,"Entrez l'age:$"
     
    tabealu db 20 dup (0)
    .code
    main proc
    mov ax,@data
    mov ds,ax
    mov     dx,offset phrase
    mov     ah,09h
    int        21h
    mov     dx,offset phrase1
    mov     ah,09h
    int        21h
    mov bx,0
    mov ax,0
    boucle:
    mov byte ptr[ds:tableau+bx],01h
    inc bx
    cmp ax,19
    jne boucle
    mov ax,0
    boucle2:
    mov dl,byte ptr [ds:tableau+bx]
    inc bx
    cmp ax,19
    jne boucle2
    mov ax,4c00h
    int21h
     
     
     
     
    Maximum        proc        uses bx cx dx, \                                        
                                    a:ptr, \
                                    n:dword
     
                    mov                bx,a                                                       
     
                    mov                cx,0                                                       
     
                    mov                ax,[bx]                                               
     
    while1:        
    cmp                cx,n                                                       
     jge                endwhile1
     
    if_1:        
    mov                dx,[bx+4*cx]                                        
     
    cmp                dx,ax
    jle                endif_1
    mov                ax,[bx+4*cx]                                      
     
    endif_1:                                                                               
     
                    inc                cx                                                                
                    jmp                while1                                                       
    endwhile1:
     
                    ret                                                                               
     
    Maximum        endp                                                                        
    end maximum
     sum:
    mov ebx,tableau
    mov dx,0
    mov ecx,sizeof tableau
    lp:
    add,dl[ebx]
    jnc next
    inc dh
    next:
    inc ebx
    loop lp
    shr   dx, cl
    int21h
    main endp
    end main
    et les erreurs que j'ai obtenues sont:
    (22)undefined symbol:tableau
    (28)la meme chose
    (33)illegal instruction
    (38)uses has no effect without language
    (49)operand type does not match
    (53)illegal indexing mode
    (57)illegal indexing mode
    (68)open procedure :main

  2. #2
    Membre averti Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Points : 390
    Points
    390
    Par défaut
    Citation Envoyé par marooh Voir le message
    et les erreurs que j'ai obtenues sont:
    (22)undefined symbol:tableau
    (28)la meme chose
    Ligne 8 vous déclarez 'tabealu' et non 'tableau'


    (33)illegal instruction
    'int 21h' et non 'int21h'. L'instruction, c'est 'int', '21h' c'est l'opérande.


    (38)uses has no effect without language
    Je ne connais plus TASM, mais je vais supposer. 'USES' préserve des registres en les sauvant en début de procédure pour les restituer à la fin. Pour faire celà, il faut avoir défini une convention d'appel, ce que le message de warning appelle 'language'. Vous devriez donc écrire un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Maximum PROC PASCAL USES etc.

    (49)operand type does not match
    'n' est un DWORD, cx un WORD.


    (53)illegal indexing mode
    (57)illegal indexing mode
    J'ai toujours écrit et vu écrit la forme [BaseReg + IndexReg * Size]. L'erreur est peut être là. Essayez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    mov  dx, [bx + cx * 4]      
    cmp  dx, ax
    jle  endif_1
    mov  ax, [bx + cx * 4]

    (68)open procedure :main
    Vous confondez peut-être le coupke PROC - ENDP et la directive END. END marque la fin de votre code. Elle s'utilise seule ou suivie du point d'entrée, ici 'main'. Elle est bien placée en ligne 83, vous n'avez qu'à supprimer la ligne 68.

  3. #3
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Bonjour,

    Ton code ressemble à du code MASM (les proc et les end partout...)

    T'aurais pas un peu copié-collé le code?
    Toute question technique envoyée en MP ira directement à la poubelle

    Un code ne marchera jamais, il n'a jamais reçu la capacité de se déplacer.
    Inutile donc de dire "ça marche pas", donnez plutôt des informations précises afin de mieux pouvoir vous aider.


    Grand gourou de la -attitude

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

Discussions similaires

  1. quelle syntaxe svp pour ce code ?
    Par man123 dans le forum Langage
    Réponses: 10
    Dernier message: 16/11/2005, 00h05
  2. Composant pour les codes à barres
    Par Bourak dans le forum Composants VCL
    Réponses: 5
    Dernier message: 11/11/2005, 17h45
  3. pb eval pour le code php dans une feuille xslt
    Par nipepsi dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 10/09/2004, 11h23

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