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

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 20
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2018
    Messages : 18
    Points : 1
    Points
    1

    Par défaut Traitement de tableau et calcul de factorielle

    Bonjour,

    j'ai un exercice à faire et je ne sais même pas par où commencer.
    On nous demande de :

    1. lire un tableau d'entiers représentés sur un word ;
    2. calculer la factorielle de chaque nombre du tableau ;
    3. remplacer chaque nombre du tableau par sa factorielle ;
    4. afficher le tableau après tri par ordre decroissant ;

    Au moins des indications, svp.

  2. #2
    Expert éminent
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    mai 2010
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : mai 2010
    Messages : 2 472
    Points : 7 438
    Points
    7 438

    Par défaut

    Bonjour alors il faudrait quelque information supplémentaire :
    1)Sur quel processeur ?
    2)Sur quel machine (parce que l'affichage ne dépend pas du processeur)
    3)Qu'est qui te bloque ?

    Parce que vite fait :
    1) pas très clair , a part lire avec un move/load ?
    2) il y'a des instruction pour ça add, mul entre d'autre , un souci pour les utiliser ?
    3) Donc faire le calcul , puis faire un move/store
    4)afficher un tableau pas bien différent que d'afficher un nombre (juste qu'il faudra faire une boucle)

  3. #3
    Membre actif

    Homme Profil pro
    Retraité
    Inscrit en
    mars 2015
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : mars 2015
    Messages : 58
    Points : 215
    Points
    215

    Par défaut

    Citation Envoyé par joujou98 Voir le message
    ...
    1_lire un tableau des entiers représentes sur un word
    ...
    Fais attention au fait que tu dépasses rapidement le format Word avec la fonction factorielle. Ainsi, 9!=362880, soit bien au-delà des 65535 autorisés.

  4. #4
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 20
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2018
    Messages : 18
    Points : 1
    Points
    1

    Par défaut mon code avec db

    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
     
    data segment
    vec db 2,1,3,4
    data ends
    code segment
    assume cs:code,ds:date;
    start:
    mov ax ,data
    mov ds,ax
     
    lea SI,vec
    mov cx,4
     
    boucle:
    call  FAC
    loop boucle
    hlt
     
    FAC proc
     
    xor cx,cx
    xor ax, ax
     
     
    mov ax,[SI] ; on met tjr la valeur a aX
    sub [SI], 1
    mov cx, [SI]; la boucle doit tourner la valeur n-1 fois
     
    fact:
     
    mul [SI]
    sub [SI], 1
    ; mov dx,ax
    ;  add dx,30H
    ; mov ah,2
    ; INT 21H
    inc si        
     
    ;MOV [SI],ax
    loop fact
    ;ret
    endp
     
     
     
    ends code
    end start

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 20
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2018
    Messages : 18
    Points : 1
    Points
    1

    Par défaut

    ça marchait pour un DB je l'ai reglé maid DW je galère

  6. #6
    Membre actif

    Homme Profil pro
    Retraité
    Inscrit en
    mars 2015
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : mars 2015
    Messages : 58
    Points : 215
    Points
    215

    Par défaut

    J'ai repris ton code ci-dessous en éliminant le code mis en commentaire (et donc inopérant de ce fait.)
    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
     
    data segment
    vec db 2,1,3,4
    data ends
    code segment
    assume cs:code,ds:date;
    start:
    mov ax ,data
    mov ds,ax
     
    lea SI,vec
    mov cx,4
     
    boucle:
    call  FAC
    loop boucle
    hlt
     
    FAC proc
    xor cx,cx
    xor ax, ax
     
    mov ax,[SI] ; on met tjr la valeur a aX
    sub [SI], 1
    mov cx, [SI]; la boucle doit tourner la valeur n-1 fois
     
    fact:
    mul [SI]
    sub [SI], 1
    inc si        
    loop fact
    ret
    endp
     
    ends code
    end start

    Plusieurs remarques:

    1) Ta déclaration de données de la ligne 3 n'est pas bonne.
    Au lieu de vec db 2,1,3,4, tu dois écrire vec dw 2,1,3,4. Il s'agit de Words et non de Bytes.

    2) Il y a une erreur de syntaxe importante dans la ligne 6. Tu dois mettre : assume cs:code,ds:data et non date comme je l'ai vu.
    En général l'assembleur commence à t'envoyer des baffes à ce stade…

    3) Ta proc FAC est un peu tortueuse.

    Personnellement, j'écrirais le code suivant pour cette proc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    FAC:
        xor dx,dx     ; ce sera une multiplication sur 16 bits, d'où un résultat dans DX:AX
        mov ax,[si]
     
    BcleFac:
        dec word Ptr [si]
        jz FinFac
        mul word ptr [si]
        jmp BcleFac
    ;--- en sortie, DX:AX contient la factorielle recherchée. On ne s'intéresse qu'à AX puisque les nombres testés sont de faibles valeurs numériques
    FinFac:
        ret
    Note bien quelque chose d'extrêmement important en ce qui concerne le typage des variables:
    Lorsque tu écris MOV AX,[SI], la mention du registre 16 bits AX suffit à déterminer que la copie de mémoire du MOV va se faire sur 2 octets. En revanche, lorsque tu écris DEC [SI], nul moyen de garantir que l'opération s'effectue sur un Byte, un Word ou autre chose. Il est donc important de préciser DEC WORD PTR [SI] pour une décrémentation sur un Word. Même remarque concernant la multiplication. Je suis étonné que ton assembleur ne t'ait pas signifié une "indétermination de type".
    A propos, qu'utilises-tu comme assembleur ? Masm, Nasm, GoAsm, AsmDmD ?

    Je reviens maintenant sur la boucle incluant call FAC
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    boucle:
        call  FAC
        mov  [si],ax    ; mémorisation résultat factorielle
        add  si,2         ; passage à la donnée suivante
        loop boucle
    Il faut mémoriser le résultat de FAC par un MOV puis passer à la donnée suivante par un ADD SI,2.

    N'ayant pas d'assembleur dans mon micro, je n'ai pas pu tester ces algorithmes.

    S'agissant du tri des données, c'est assez simple et largement documenté sur le web si tu te contentes du très basique tri à bulles (Bubble sort).

  7. #7
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 20
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2018
    Messages : 18
    Points : 1
    Points
    1

    Par défaut

    Emu8086

  8. #8
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 20
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2018
    Messages : 18
    Points : 1
    Points
    1

    Par défaut

    Ça se boucle infiniment BcleFac

  9. #9
    Membre actif

    Homme Profil pro
    Retraité
    Inscrit en
    mars 2015
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : mars 2015
    Messages : 58
    Points : 215
    Points
    215

    Par défaut

    En principe, non, car tu en sors forcément par JZ FinFac

    C'est un test en réel qui te dit ça ?

  10. #10
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 20
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2018
    Messages : 18
    Points : 1
    Points
    1

    Par défaut

    Oui et je sais pas vraiment comment je vais utiliser cette procédure pour calculer le fact de chaque élément du tableau :/

  11. #11
    Membre actif

    Homme Profil pro
    Retraité
    Inscrit en
    mars 2015
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : mars 2015
    Messages : 58
    Points : 215
    Points
    215

    Par défaut

    Je vois cela sur un assembleur mais je ne pourrai te répondre que demain. Bonne soirée!

  12. #12
    Membre actif

    Homme Profil pro
    Retraité
    Inscrit en
    mars 2015
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : mars 2015
    Messages : 58
    Points : 215
    Points
    215

    Par défaut

    Bon, j'ai revu FAC et, cette fois-ci, j'ai testé et ÇA MARCHE (voir ci-dessous)
    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
    ;================================================================
    ;    Calcul de factorielles
    ;----------------------------------------------------------------
    FAC:
    	push cx
    	xor cx,cx		        ; cx = 0
            xor dx,dx		        ; ce sera une multiplication sur 16 bits, d'où un résultat dans DX:AX
            lodsw			; donnée dans AX et SI=SI+2 après cette instruction
     
            cmp ax,2                   ; 2! ou 1! ???
    	jbe FinFac
     
    	cmp ax,8                   ; calcul de n! avec n>8 conduisant à un dépassement de capacité ?
    	jbe Xx
    	mov ax,-1		; signale une impossibilité de calcul
    	jmp FinFac
     
    Xx:	mov bx,ax
    	mov cx,ax
    	sub  cx,2
     
    BcleFac:
        dec bx
        mul bx
        loop BcleFac
    ;--- en sortie, DX:AX contient la factorielle recherchée. On ne s'intéresse qu'à AX puisque les nombres testés sont de faibles valeurs numériques
    FinFac:
    	pop cx
        ret
    Tu avais raison. La structure de FAC que j'avais retenue n'était pas bonne. J'ai donc repris ton schéma initial.
    Sur le plan pratique, le calcul de n! exige n-1 multiplications. Mais, si l'on remarque que la multiplication par 1 n'a aucun intérêt et que le résultat de 2! est évident, il ne reste plus que n-3 multiplications à faire…


    Pour le reste, voici ce que j'ai fait:
    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
    vec	dw 2,1,3,4
    vecOut	dw 4 dup(0)
     
    .code
    Start:
    cld
    BcleOut:
    	xor bx,bx	; bx = 0
    	mov si,offset vec
    	mov di,offset vecOut
    	mov cx,4 
     
    ;----- Boucle de calcul des factorielles ------
    boucle:
    	call  FAC
    	stosw		; donnée dans AX en [DI] et DI=DI+2 après cette instruction
    	loop boucle
    J'ai créé un buffer vecOut permettant de recevoir le résultat des calculs de factorielles.

    Voilà, je pense t'avoir tout dit. Si tu as besoin de précisions, n'hésite pas.
    Note bien que j'ai développé mon test pour Windows 32 bits ce qui oblige à faire certaines acrobaties avec les registres de pointage qui doivent être à 32 bits. C'est pourquoi tu trouveras encore certaines appellations 32 bits résiduelles que je n'ai pas pensé à corriger.

    Comme je me plais à le répéter, je n'arrive toujours pas à comprendre que l'on travaille encore en 16 bits aujourd'hui alors que le format courant est 32 bits et que l'on devrait se dépêcher de passer au 64 bits.

  13. #13
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 20
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2018
    Messages : 18
    Points : 1
    Points
    1

    Par défaut affichage de vecOut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    mov si,offset vecOut 
    	 mov cx,4
    	affiche: 
    	   mov  ax,[si] 
    	   mov ah,2
    	   int 21h 
    	   loop affiche
    pour voir s'il a bien calculé le factoriel ou pas
    mais le RET ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     FinFac:
    	pop cx
       ; ret
    met fin au prog , et si j lenleve , une boucle infinie !

  14. #14
    Membre actif

    Homme Profil pro
    Retraité
    Inscrit en
    mars 2015
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : mars 2015
    Messages : 58
    Points : 215
    Points
    215

    Par défaut

    Tu fais une confusion énorme dans le sens où tu ne peux afficher le contenu d'un nombre binaire directement à l'écran. Il te faut préalablement le convertir en décimal. Pour ce faire, on met en œuvre une boucle consistant en une succession de divisions par 10 dont on retient ensuite les restes. Ces restes, chacun constituant un chiffre, il faut ensuite les mettre au format ASCII en leur additionnant la valeur hexa 30h.

    Plus généralement, quand tu veux éditer un résultat à l'écran, il est préférable de constituer un buffer (en l'occurrence 50 octets ici de manière arbitraire) et de le remplir ensuite avec les données à afficher sans omettre de les terminer par le symbole '$'. Voici l'écriture d'un tel module qu'il suffit ensuite d'appeler par un call (c'est garanti testé)

    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
    ;====================================================================
    ;     Sous-programme de conversion en ASCII d'un nombre
    ;                   binaire donné dans AX
    ;--------------------------------------------------------------------
    ; A l'entrée,	AX = nombre binaire à convertir en ASCII
    ;			EDI = pointeur du buffer recevant le nombre ASCII
     
    ConvertAscii:
    	push bx
    	push cx
    	push dx
    	mov  bx,10
    	xor  cx,cx
     
    ;--- Divisions par 10 successives pour obtenir un résultat affichable
    BcleAscii:
    	xor  dx,dx ; edx = 0 (car c'est la partie haute du dividende)
    	div  bx		; division par 10 de DX:AX
    	push dx		; on stocke le reste en pile
    	inc  cx		; on compte le nombre d'empilages
    	cmp  ax,0		; si le quotient est nul, on arrête
    	jne  BcleAscii
     
    ;--- Restitution de la pile dans le buffer
    BcleBuffer:
    	pop  ax
    	add  al,30h	; conversion en ASCII
    	stosb
    	loop BcleBuffer
     
    	pop  dx
    	pop  cx
    	pop  bx
    	ret
    Ensuite, il faut que tu utilises la fonction AH=9 de l'INT 21h qui permet d'afficher le contenu d'un buffer pointé par DSX (lire DS, 2 points, DX) jusqu'au symbole '$' qui en constitue le limiteur.


    Voici comment faire :
    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
    ; Note : il faut déclarer quelque part, dans ton segment de données, le buffer :
    ;      bufferAff  db 50 dup(0)
    ;===============================
    ;   mettre les résultats dans le buffer
    ;---------------------------------------------
             mov si,offset vecOut
             mov di,offset bufferAff 
    	 mov cx,4
    affiche: 
    	   lodsw 
    	   call ConvertAscii
               mov al,13   ; CR
               stosb
               mov al,10   ; LF
               stosb
    	   loop affiche
     
               mov al,'$'   ; symbole $ de fin de chaîne
               stosb
     
    ;====================
    ;   Affichage contenu buffer
    ;---------------------------------------------
               mov  dx,offset bufferAff
               mov  ah,9
               int  21h
    S'agissant enfin du problème que tu rencontres en supprimant ou non le RET de FAC. Il s'agit d'une erreur d'empilage qui se situe quelque part dans ton programme. Ne te livre pas à ce genre de modifications hasardeuses. Tu prends le risque de faire quelques dégâts. Si tu coinces, il faudra que tu nous reproduises le listing COMPLET de ton programme car c'est le SEUL moyen de repérer l'erreur

  15. #15
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 20
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2018
    Messages : 18
    Points : 1
    Points
    1

    Par défaut mon essaie

    j'ai pas remplacé ce que vous m'avez donné pour le factoriel parce que j'ai réussi à le faire mais l'affiche du tableau après le TRI ça marchait pas !



    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
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
     
    data segment                 ; declaration 
        vec1 dw 2 dup(?) 
     
        data ends 
    code segment 
        assume cs:code,ds:data;
        start:
     
        mov ax,data
        mov ds,ax
     
        mov cx,2
     
        ;MOV AH,09H   ; ici je voudrais afficher un message donnez les valeurs du tab ou klk chose com ca !
        ;LEA DX,MSG1
        ;INT 21H
     
     
        lea si,vec1 
     
        boucle:             ; REMPLISSAGE DU VEC1 
        call LIRENOMBREDECIMAL
     
        mov [si],ax
        inc si   
        inc si
     
        loop boucle 
     
     
       ; MOV AH,01H
        ;INT 21H
     
        ;SUB AL,30h
        ;XOR AH,AH
     
        ;CALL FACTORIAL
        ;HLT 
     
     
        FACTORIAL PROC
            MOV CX,2
            MOV AX,1
     
            FACTO:
            MUL CX
            LOOP FACTO
     
            MOV FACT,AX                 ; SAUVEGARDE DU RESULTAT 
            dec cx       
     
            RET 
     
            FACTORIAL ENDP
     
     
         LEA SI,vec1  
         xor cx, cx
         mov cx,2
         bouclefact: 
        ; MOV AX,[si]
         call FACTORIAL
         MOV AX,FACT
         MOV [SI],AX
         MOV CX,2
         DEC CX
         loop bouclefact   
             LEA SI ,vec1 
             xor ax,ax
             xor cx,cx
            ;mov ax,[SI]
             mov cx,2  
     
     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     
         lea si,vec1
         xor cx,cx
         mov cx,2
         boucleTri:               ; TRI
         call  TRI
         mov cx,2
         dec cx 
         loop boucleTri
        ;mov ah,01H    
        ;int  21H
     
        ;MOV BL,AL
        ;mov y,bl
        ;mov ah,01H
        ;int 21H 
        ;mov x,al
                                       ; PROC TRI DU TABLEAU 
     TRI  proc 
     
     
     
        lea si,vec1
        mov ax,[SI]
        mov y,ax
        inc si
        inc si
        xor ax,ax
        mov ax ,[si]       
     
     
        CMP y,AX
        ja above
        jb below
     
        below:
            mov dx,Ax
           mov ah,2  
           int 21H 
           xor dx,dx 
           mov dx,y
           mov ah,2
           int 21h 
     
     
           HLT
        above:
          mov dx,ax
          mov ax,bx
          mov bx,dx
     
          xor dx,dx
           mov dx,ax
           mov ah,2
          int 21h 
            xor dx,dx
           mov dx,bx
           mov ah,2
           int 21H
          HLT  
          ENDP
     
     
         ;; FACTORIEL    ; c'etait ma procedure je la conserve pour connaitre mes fautes!
     
         ;FACTORIEL PROC
     
          ;   xor ax, ax
           ;  mov ax,[SI] ; on met tjr la premiere valeur a ax
            ; mov bx,ax
             ;dec ax
             ;mov cx,ax
             ;inc ax
             ;sub [SI], 1  ;
             ;mov cx, [SI] ; la boucle doit tourner la valeur n-1 fois
          ; fact: 
           ;  dec bx
           ;  mul bx 
             ;sub [SI], 1 
            ; MOV [SI],ax
     
     
             ;loop fact   
     
     
              ;ret     
     
     
     
                   lea si, vec1
     
                     affichage:              
               MOV AX,[SI]
              CALL AFFICHENOMBREDECIMAL  
                      loop affichage    
                   Hlt   
     
        AFFICHENOMBREDECIMAL PROC        ; PROCEDURE AFFICHAGE 
        mov dl,al
        mov ah,2
        int 21h
        ret   
        ENDP
     
    LIRENOMBREDECIMAL proc               ; PROCEDURE LECTURE 
     
    xor ax,ax
     
    mov ah,1h
    int 21h
     
    cmp al,'0'
    je legal
    ja legal
    jb illegal
     
    illegal:
     
    ;lea dx,msg3
    ;mov ah,9
    ;int 21h
     
    mov ah,1h
    int 21H
     
    jmp legal
     
     
     
     
     
    legal:
    cmp al,'A'
    je illegal
    ja illegal
     
     
    ;lea dx,msg2
    ;mov ah,9
    ;int 21h
     
    CALL AFFICHENOMBREDECIMAL 
    RET
     
     
    endp     
     
         FACT DW ?     
         MSG1 DB 10,13,"DONNEZ LES VALEURS DU VEC1 :$"
         y dw ?
     
    ret   
    ends code
    end

  16. #16
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 20
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2018
    Messages : 18
    Points : 1
    Points
    1

    Par défaut

    ça sera un grand plaisir si tu me fais des indications si tu vas me corriger mon code, je veux pas juste copier sans comprendre, merci beaucoup et désolée j'ai pris de ton temps !

  17. #17
    Membre actif

    Homme Profil pro
    Retraité
    Inscrit en
    mars 2015
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : mars 2015
    Messages : 58
    Points : 215
    Points
    215

    Par défaut

    Est-ce que le listing de ton post de 13:45 est le dernier et surtout, EST-IL COMPLET ? Je veux bien travailler dessus mais sous cette seule condition. Merci de me le dire assez rapidement car j'ai beaucoup de choses à traiter cet après-midi.

  18. #18
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 20
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2018
    Messages : 18
    Points : 1
    Points
    1

    Par défaut

    Oui c'est tout ce que j'ai fait , enfaite lexo j l'ai partagé au début

  19. #19
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 20
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2018
    Messages : 18
    Points : 1
    Points
    1

    Par défaut

    Le Tri ça marchait comme une procédure mais j'arrive toujours pas à l'appliquer sur un tableau + l'afficher en mode décroissant

  20. #20
    Membre actif

    Homme Profil pro
    Retraité
    Inscrit en
    mars 2015
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : mars 2015
    Messages : 58
    Points : 215
    Points
    215

    Par défaut

    Je viens de regarder l'ensemble du programme et je dois avouer que je ne m'y retrouve absolument pas par rapport aux indications que j'ai pu te donner. Tu es passé de 4 à 2 données que, du coup, tu as décidé de saisir au clavier…
    Bref, je crains de ne pouvoir continuer à t'aider dans ces conditions et j'en suis désolé.
    Fais attention à une règle essentielle : met au point chaque partie du programme sans toucher aux autres, enfin quand c'est possible.

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/12/2012, 12h54
  2. Réponses: 10
    Dernier message: 19/01/2006, 07h41
  3. Calcul du factorielle
    Par knecmotet dans le forum C
    Réponses: 15
    Dernier message: 16/09/2005, 12h33
  4. Tableau et calculs
    Par isak dans le forum Composants
    Réponses: 1
    Dernier message: 30/06/2005, 11h33
  5. fonction qui calcule la factorielle ?
    Par piff62 dans le forum C
    Réponses: 8
    Dernier message: 27/02/2005, 12h00

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