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 :

Multiplication des éléments d'un tableau


Sujet :

x86 16-bits Assembleur

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Janvier 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 8
    Points : 0
    Points
    0
    Par défaut Multiplication des éléments d'un tableau
    bonjour j'arrive par a faire la multiplication des elements de tableau

    par exemple j'ai un tableau qui a les elements 1,2,3

    j'entre dans une boucle ,et al prend a chaque fois un element de tableau comme : mov al,tab[si]

    je veux avoir une sorte de multiplication comme ca : mul bl,al (je sais que cen'est pas correct ) ,mais c'est ca l'idée

    que quelqun medonne une solution

    voici mon programme

    Code asm : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    tab db 1,2,3
    .code
    .startup
    mov cx,0
    mov si,0
    for :cmp cx,2
    ja end for
    mov al,tab[si]
    bl<--bl*al (c'est ca l'idée)
    inc cx
    inc si
    jmp for


    et merci

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 372
    Points : 23 628
    Points
    23 628
    Par défaut
    Bonjour et bienvenue,

    Tu ne peux pas le faire directement car chaque affectation nécessite un « câblage » interne du micro-processeur qui n'existe pas forcément. C'est pourquoi les différents registres ne sont pas tous interchangeables. En outre, la multiplication utilise la technique de l'accumulateur, dans laquelle au moins un des registres est à la fois implicitement une opérande et le receveur du résultat, ce qui te permet d'enchaîner les opérations en cascades sans avoir à recharger la donnée que tu viens de calculer.

    Toutefois, si BL est déjà une opérande et que tu veux recevoir également le résultat dans BL, alors le fonctionnement est le même. Il te suffit donc d'inverser l'utilisation de AL et BL dans ton programme pour qu'il redevienne compatible avec le jeu d'instruction du x86.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Janvier 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 8
    Points : 0
    Points
    0
    Par défaut
    regardez ce que j'ai fait comme vous avez dit mais ca marche pas,ca fait plus de 5 jours qe j'ai pas trouvé e réponse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    tab db 1,2,3
    .code
    .startup
    mov cx,0
    mov si,0
    mov bl,1
    for :cmp cx,2
    ja end for
    mov bl,tab[si]
    mul al
    inc cx
    inc si
    jmp for

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 372
    Points : 23 628
    Points
    23 628
    Par défaut
    Citation Envoyé par zone-x Voir le message
    regardez ce que j'ai fait comme vous avez dit mais ca marche pas,ca fait plus de 5 jours qe j'ai pas trouvé e réponse
    C'est « MUL BL » qu'il faut écrire. AL est toujours implicite.

    Le « JA end for » risque de te poser problème également.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Janvier 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 8
    Points : 0
    Points
    0
    Par défaut
    regarde le meme probleme toujours
    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
     
    .model small 
    .stack 2048
    .data
    tab db 1,2,3
    .code
    .startup
    mov cx,0
    mov si,0
    for:cmp cx,2
    ja endfor
    mov al,tab[si]
    mul bl
    inc cx
    inc si
    jmp for 
    endfor:
    add al,30h
    mov ah,0eh
      int 10h
    .exit
    end

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 372
    Points : 23 628
    Points
    23 628
    Par défaut
    Plusieurs choses :

    • « Ça ne marche pas » n'est pas une description acceptable de ton problème. Dis-nous précisément ce que tu obtiens ;
    • Essaie d'indenter correctement ton programme. Il est illisible ;
    • Mets un espace après le deux-points « : » de tes étiquettes ;
    • Une multiplication prend deux opérandes : il faut initialiser AL au moins la première fois. Si tu veux multiplier tes trois termes entre eux, mets « 1 » dans AL pour obtenir « 1 × tab1 × tab2 × tab3 » ;
    • Il faut charger ensuite BL et multiplier BL ;
    • Cette syntaxe ne peut pas fonctionner : tab[si]. Ce n'est pas du langage C. Revois les modes d'adressage ;
    • Enlève les étiquettes avec des points initiaux comme « .startup » « .exit » et autres. La notation pointée est couramment utilisée pour nommer les sections d'un fichier exécutable, mais dans un listing avec les assembleurs modernes, elle sert à déclarer une étiquette locale, relative à la dernière étiquette globale. Et l'un et l'autre n'ont rien à voir entre eux.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Janvier 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 8
    Points : 0
    Points
    0
    Par défaut
    ca marcheeeeeeeee ! merci beaucoup ca m'a aidé

    voici le code complet

    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
     
     
    .model small
    .stack 2048
    .data
    tab db 1,2,3
    .code
    .startup
    mov cx,0
    mov si,0
    mov al,1
    for:cmp cx,2
    ja endfor
    mov bl,tab[si]
    mul bl
    inc cx
    inc si
    jmp for
    endfor:
     
    add al,30h
    mov ah,0eh
    int 10h
    .exit
    end

  8. #8
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 372
    Points : 23 628
    Points
    23 628
    Par défaut
    Merci pour le code complet. Mais n'oublie pas

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Janvier 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 8
    Points : 0
    Points
    0
    Par défaut
    d'accord ,je l'ai ajouté

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Janvier 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 8
    Points : 0
    Points
    0
    Par défaut probleme multiplication de 2 tableau
    bonjour j'ai un probleme d'affichage de resultat multiplication de 2 tableau il m'affiche 4 a la place de 5

    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
     
    .model small
    .stack 2048
    .data
    tab1 db 1,2
    tab2 db 1,2
    .code
    .startup
    mov ax,@data
    mov ds,ax
    mov si,0
    mov cx,0 
    mov al,1
    for: cmp cx,1
    ja endfor
    mov al,tab1[si]
    mov bl,tab2[si]  
    mul bl 
    inc si
    inc cx
    jmp for
    endfor:
    add al,30h
    mov ah,0eh
    int 10h
    .exit
    end
    quelle est le probleme ?

    et merci

  11. #11
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 372
    Points : 23 628
    Points
    23 628
    Par défaut
    C'est normal : tu multiplies un à un les éléments respectifs de tes deux tableaux, mais tu n'additionnes pas les produits entre eux. AL ne contient donc que le résultat de la dernière opération. Et « 2 × 2 » fait bien quatre.

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Janvier 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 8
    Points : 0
    Points
    0
    Par défaut
    oui je sais ,c'est ca mon problème j'ai pas ne diée de commener additioner les produit

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Janvier 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 8
    Points : 0
    Points
    0
    Par défaut
    j'ai trouvé une solution :

    le code pour ceux qui ont le meme problème ,et merci pour ta réponse

    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
     
     
    .model small
    .stack 2048
    .data
    tab1 db 1,4
    tab2 db 1,2  
    p db 0
    .code
    .startup
    mov ax,@data
    mov ds,ax
    mov si,0
    mov cx,0 
    mov al,1
    for: cmp cx,1
    ja endfor
    mov al,tab1[si]
    mov bl,tab2[si]
    mul bl
    add p,al
    inc si
    inc cx
    jmp for
    endfor: 
    mov al,p
    add al,30h
    mov ah,0eh
    int 10h
    .exit
    end

    un code optimisé pour un nombre > 9
    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
     
     
    .model small
    .stack 2048
    .data
    tab1 db 1,2,1,2,3,4,2,1,1,1
    tab2 db 1,2,1,2,3,4,2,1,1,1
    p db 0
    .code
    .startup
    mov ax,@data
    mov ds,ax
    mov si,0
    mov cx,0 
    mov al,1
    for: cmp cx,9
    ja endfor
    mov al,tab1[si]
    mov bl,tab2[si]
    mul bl
    add p,al
    inc si
    inc cx
    jmp for
    endfor:
    mov al,p
    mov ah,0
    mov bl,10
    div bl
    mov dl,ah
    add al,30h
    mov ah,0eh
    int 10h
    mov al,dl
    add al,30h
    mov ah,0eh
    int 10h
    ;fin
    mov ax,4c00h
    int 21h
    .exit
    end

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

Discussions similaires

  1. Ajouter des élément a un tableau
    Par Death83 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 31/07/2007, 14h23
  2. Réponses: 7
    Dernier message: 21/08/2006, 13h58
  3. [Struts] ordre des éléments dans un tableau de propriétés
    Par zais_ethael dans le forum Struts 1
    Réponses: 2
    Dernier message: 09/05/2006, 15h54
  4. Réponses: 4
    Dernier message: 17/04/2006, 20h10
  5. [dom je pense]accéder à des éléments d un tableau sans id
    Par luta dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 07/02/2006, 15h31

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