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 :

Somme de tableaux


Sujet :

Assembleur

  1. #1
    Provisoirement toléré
    Profil pro
    Inscrit en
    Février 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 29
    Points : 17
    Points
    17
    Par défaut Somme de tableaux
    Bonjour ! Voici mon programme.
    Je cherche à
    Réaliser un sous-programme permettant de stocker en pile ce troisième tableau (PUSH). Puis toujours dans ce sous-programme, de lire le tableau sans détruire la pile. Et enfin détruire la pile (POP).

    Comparer le code hexadecimal des LEA utilisés et le code généré par:
    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    ;*******************************************************
    ;*	programme manipulant les tableaux et la pile		*
    ;*	implicitement code 8086								*
    ;*	tasm /la /zi lea.asm								*
    ;*	tlink /v lea.obj									*
    ;*	td	lea.exe											*
    ;*	code et erreur dans lea.lst							*
    ;*														*
    ;*				P.DUMAS 5/11/2002						*
    ;*******************************************************
    name direct 
    		.MODEL SMALL	; tout dans le même segment
    ;*************** segment de pile
    		.STACK 100h
    ;*************** segment de données
    		.DATA
     
    TABLEAU1		db	27,134,65,87,245,22,34,87,241,23
    TABLEAU2		db	12,200,154,56,12,99,233,12,210,59
    RESULTAT		db 20 DUP (?)
     
    commencement    db      "debut",13,10,"$"
    terminaison 	db 	"fin",13,10,"$"
     
    ;*************** segment de code
    		.CODE
    DEBUT:
    		MOV AX,@data
    		MOV DS,AX
     
    		;à faire
     
    ;*************** affichage du commencement
    		;à faire
    ;lea ax,commencement
    ;call AFFICH
     
    ;*************** remplissage des tableaux
    		;à faire
    	mov ax,0
     
            mov dx,0
            mov di,10
            mov bx,10
            mov si,10
            call boucle
     
    ;*************** mise en pile, lecture sans destruction, destruction
    		;à faire
     
    ;*******************affichage de la terminaison
    		;à faire
     
    ;******************* fin
    		call	fin
     
    ;*******************************************************
    ;*	fonction de fin de programme						*
    ;*******************************************************
    		;à faire
     
    fin:
     
         mov ax,4c00h
         INT 21h
     
         ;end DEBUT
    ;*******************************************************
    ;*	fonction d'affichage								*
    ;*	paramètre d'entrée dans ax: adresse du texte 		*
    ;*	à afficher											*
    ;*******************************************************
    AFFICH:
    		mov	dx,ax
    		mov	ah,9
    		int	21h
    		ret
    ;*******************************************************
     
    ;*******************************************************
    ;*	remplissage du tableau	 RESULTAT					*
    ;*	entrées:	bx: offset 1er tableau					*
    ;*				si: offset 2ème tableau					*
    ;*				di: offset tableau résultat				*
    ;*******************************************************
    		;à faire
     
    boucle: 
            lea bx,TABLEAU1
            lea si,TABLEAU2
     
            add bx,9
            add si,9
            mov al,[bx]
            mov dl,[si]
            jc carry
     
     
     
     
    RESUL:
            lea di,RESULTAT
            add di,9
            mov al,[di]
            dec bx
            dec si
            dec di
            cmp di,1
            loop boucle
     
     
     
    carry:
            adc al,1
            mov RESULTAT[di-1],al
     
            jmp RESUL
     
     
    ;*******************************************************
     
    ; fonction de mise en pile du tableau RESULTAT
     
    		;à faire
            ;push RESULTAT
     
    ; lecture de la pile sans dépilage
     
    		;à faire
              ;mov BP,SP
     
    ;destruction du tableau RESULTAT en pile
     
    		;à faire
     
                    ;POP RESULTAT
     
     
    		end DEBUT
    Merci d'avance !!

  2. #2
    Membre actif Avatar de Nyarlathotep
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 174
    Points : 217
    Points
    217
    Par défaut
    pour NASM
    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
     
     
    ; Mise en pile tab
    mov cx,20
    mov si,0
    remp:
    mov al,[RESULTAT+si]
    push al
    inc si
    loop remp
     
    ;le tab est dans la pile ( verifier si overflow pile )
    push bp
    mov bp,sp
     
    mov si,bp
    add si,3
    mov cx,20
    lect:
    mov al,[si]
    ;element du tab dans al
    inc si
    loop lect
     
    pop bp
     
    ;destruction
    mov cx,20
    dest:
    pop al
    loop dest
    Mais bon, je n'ai pas testé ce code, donc à toi de le vérifier.
    "That is not dead which can eternal lie
    And with strange aeons even death may die"

    The Call of Cthulhu

  3. #3
    Provisoirement toléré
    Profil pro
    Inscrit en
    Février 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    j'ai fait un programme quasiment identique au tien mais pourquoi fais tu ces lignes de programme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mov al,[RESULTAT+si]
     
    add si,3

  4. #4
    Provisoirement toléré
    Profil pro
    Inscrit en
    Février 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    je cherche à afficher les 2 tableaux à l'écran ainsi que le tableau résultat!

    pe t-on aussi afficher le stockage en pile de ce troisième tableau, la lecture du tableau sans détruire la pile et la détruction de la pile à l'écran.

    merci d'avance !!

  5. #5
    Membre actif Avatar de Nyarlathotep
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 174
    Points : 217
    Points
    217
    Par défaut
    Eh bien, pour le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mov al,[RESULTAT+si]
    C'est pour obtenir l'élément suivant du tableau.

    Quant à ça :
    C'est à cause du "push bp". Il faut sauter 2 octets. Et un autre pour acceder au premier élement du tableau sur la pile.
    "That is not dead which can eternal lie
    And with strange aeons even death may die"

    The Call of Cthulhu

Discussions similaires

  1. [Tableaux] Bug somme et number_format
    Par NerOcrO dans le forum Langage
    Réponses: 6
    Dernier message: 24/07/2007, 16h03
  2. affichage somme tableaux
    Par jcaspar dans le forum Langage
    Réponses: 6
    Dernier message: 21/02/2007, 16h10
  3. [Tableaux] Calculer la somme d'un tableau
    Par Skippy1 dans le forum Langage
    Réponses: 14
    Dernier message: 11/01/2007, 18h12
  4. [Tableaux] Calcul de somme
    Par Flushovsky dans le forum Langage
    Réponses: 2
    Dernier message: 21/09/2006, 16h45
  5. [Tableaux] Somme des éléments d'un tableau
    Par brazilpalace dans le forum Langage
    Réponses: 3
    Dernier message: 02/08/2006, 12h17

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