Tableau avec 8086!help me

ASBYoucef Messages postés 6 Date d'inscription lundi 14 mars 2005 Statut Membre Dernière intervention 1 mars 2008 - 1 mars 2008 à 19:11
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 - 5 mars 2008 à 08:16
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

Guilou34 Messages postés 142 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 29 janvier 2016 1
2 mars 2008 à 23:42
Dans le boucle : suprime l'instruction lea bx,tab   bx reprend à chaque fois sa valeur initiale donc bx n'est jamais incrémenté! 
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
5 mars 2008 à 08:16
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


@++
0
Rejoignez-nous