Tableau avec 8086!help me

Signaler
Messages postés
6
Date d'inscription
lundi 14 mars 2005
Statut
Membre
Dernière intervention
1 mars 2008
-
cs_patatalo
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
-
bonsoir!j'ai fait un programme qui saisie un tableau,puis il cherche le maximum,mais le problème c'est que il donne une résulata fausse,il donne la dernière valeur introduite.le saisie fonctionne bien ,le triage fonctionne bien,il reste just le passage du saisie vers le triage,la partie qui est en gras :aidezzzzzzzzzzz moi svp ,voici le prgramme:
pile  segment stack
      db 100h dup(?)
pile  ends

data  segment
;msg db "le nombre superieur est","$"
tab db 4 DUP (?)
 data  ends
 
code  segment
assume cs:code, ds:data
main:        

                mov ax,data
                mov ds,ax     
                mov cx,4
                lea bx,tab
                push bx;je sauvgarde l'adresse
;*********saisie des valeurs de tab*******         
boucle:          mov ah,1
                int 21h
                lea bx,tab
                mov [bx],al
                inc bx
                loop boucle
;*******************************************************                         
            pop dx       ;
          mov bx,dx
         mov bx,offset tab                 ;charger bx par l'adresse du 1er element du tableau
        mov al,[bx]                       ;charger ax par la valeur qui se trouve dans l'adresse contenu dans bx
         mov cx,3                          ;charger cx par le nombre d'element du tableau,avec LOOP

label:
                mov ah,[bx+1]                     ;charger AH par la valeur suivant
                cmp ah,al                         ;comparer AH avec AL
                ja  tes                           ; si AH superieur à AL,saut vers TES
                inc bx
                loop label
                jmp fin

tes:
                mov al,ah                         ;ah superieur à al donc il va l'écraser
                inc bx                            ; incrémenter l'adresse pour pointer sur la prochaine valeur
                loop label                        ;sauter vers label
               
fin:           
               
                mov dl,al                         ;AH contient la valeur superieur final du tableau
                or dl,30h                         ;convertion
                mov ah,02h                        ;fonction qui affiche un carractére
                int 21h                           ;interruption
                mov ah,4ch                        ;fonction pour sortir du dos
                int 21h                           ;interruption

code  ends

       end main
     

         

2 réponses

Messages postés
142
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
29 janvier 2016
1
Dans le boucle : suprime l'instruction lea bx,tab   bx reprend à chaque fois sa valeur initiale donc bx n'est jamais incrémenté! 
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
salut,


oui puis ta boucle de test pourrait se resumer a un truc comme ça:

pop bx
mov cx,3
mov ah,[bx]
.1
mov al,ah
.2
dec cx
lea bx,[bx+1] ;incremente bx
je fin ; cx = 0 -> fin mettre aussi "jcxz" fonctionne
cmp al,[bx]
mov ah,[bx]
jae .2
jmp .1


@++