begin process at 2012 05 25 12:08:04
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Assembleur

 > 

Archives

 > 

Autres asm

 > 

Problème avec un code


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème avec un code

lundi 22 août 2005 à 18:11:41 | Problème avec un code

showbiz_hurricanes

Membre Club
Bonjour
Pour un projet universitaire, je dois concevoir un programme de tri en assembleur mais celui ci ne fonctionne pas comme je le voudrai.

Le menu principal s'affiche correctement  à la compliation mais lorsque je choisis un des options, il s'arrête.

Merci d'avance pour votre aide.

je vous montre le code que j'ai "pondu".

;Entrer des valeurs dans un tableau et trier le tableau

TITLE tritableau v1.0 beta(tri.asm)

INCLUDE IUTInfo.inc

.data
reponse BYTE ?

prompt BYTE "Tapez la majuscule A,B,C,D ou E:",0,0Ah

msgA BYTE "A-Remplir le tableau.",0,0Ah
msgB BYTE "B-Trier le tableau:",0,0Ah
msgC BYTE "C-Afficher les tableaux:",0,0Ah
msgD BYTE "D-Comparer les 2 tableaux:",0,0Ah
msgE BYTE "E-Quitter le programme!",0,0Ah

prompt1 BYTE "Voici le tableau une fois trié",0,0Ah


tab1 DWORD 50 DUP (?)
tab2 DWORD 50 DUP (?)



.Code
main PROC
     call Clrscr                      ;écran effacé
     call Crlf                        ;retour à la ligne

L1:     call Menu                     ;appel du sous-programme Menu

     .IF (reponse == 'A')             ;condition d'appel du sous-programme Remplir
     call Remplir                     ;appel du sous-programme Remplir
     call Affichertbl1                ;appel d'affichage du premier tableau
     call Trier                       ;appel du sous-programme Trier
     call Affichertbl2                ;appel d'affichage du second tableau

     .ELSEIF (reponse == 'B')         ;condition d'appel du sous-programme Trier
     call Trier                       ;appel du sous-programme Trier
     call Affichertbl1                ;appel d'affichage du premier tableau
     call Affichertbl2                ;appel d'affichage du second tableau

     .ELSEIF (reponse == 'C')         ;condition d'appel du sous-programme Afficher
     call Affichertbl1                ;appel d'affichage du premier tableau
     call Affichertbl2                ;appel d'affichage du second tableau

     ;.ELSEIF (reponse == 'D')        ;condition d'appel du sous-programme Comparer
     ;call Comparer                   ;appel du sous-programme Comparer

     .ELSEIF (reponse == 'E')         ;condition d'appel du sous-programme Fin
     call Fin                         ;appel du sous-programme Fin

     .ENDIF

     exit
main ENDP

Menu PROC near                        ;affichage du Menu
     call Clrscr
     call Crlf
     mov edx, OFFSET prompt
     call WriteString
     mov eax, 500
     call Delay
     call Crlf
     mov edx, OFFSET msgA
     call WriteString
     mov eax, 500
     call Delay
     call Crlf
     mov edx, OFFSET msgB
     call WriteString
     mov eax, 500
     call Delay
     call Crlf
     mov edx, OFFSET msgC
     call WriteString
     mov eax, 500
     call Delay
     call Crlf
     mov edx, OFFSET msgD
     call WriteString
     mov eax, 500
     call Delay
     call Crlf
     mov edx, OFFSET msgE
     call WriteString
     call ReadChar
     mov reponse,al                   ;enregistrement de la réponse de l'utilisateur
     ret
Menu ENDP


Remplir PROC near                     ;sous-programme de remplissage du tableau n°1
        mov  ebx,50                   ;initialisation du nombre de valeurs à générer
        mov  esi,0                    ;initialisation de la première case du tableau
L1:     mov  eax,50                   ;valeur maximum à générer dans le tableau
        call RandomRange              ;appel de la fonction de valeur aléatoire
        mov  [tab1+esi],eax           ;remplissage du tableau n°1
        mov  [tab2+esi],eax           ;remplissage du tableau n°2
        add  esi,TYPE DWORD           ;
        dec  ebx                      ;décrémentation du nombre d'éléments à générer
        cmp  ebx,0                    ;comparatif du nombre d'éléments restant à générer
        jne  L1                       ;boucle forcée tant que les 2 tableaux ne sont pas remplis
        ret
Remplir ENDP


Trier PROC near                       ;sous-programme de tri du tableau n°2
       mov esi,0                      ;placement sur la première case du tableau n°1
       mov ebx,0
       add ebx,type dword



L3:
          mov eax,[tab2+esi]
          mov edx,[tab2+ebx]
          cmp eax,edx
          jge L1

L2:       add esi,type dword
          add ebx,type dword
          cmp ebx,200
          je  L4
          jmp L3



L1:       mov [tab2+esi],edx
          mov [tab2+ebx],eax
          cmp ebx,200
          je  L4
          jmp L2


L4:       ret

Trier ENDP


Affichertbl1 PROC near
         call Clrscr
         mov  dh,0
         mov  dl,0

         mov  ebx,0
         mov  esi,0

L1:      cmp  ebx,50
         je   L2
         call gotoxy
         mov  eax,[tab1+esi]
         call WriteInt
         add  esi,TYPE DWORD
         inc  ebx
         add  dl,5
         cmp  dl,50
         jne  L1
         add  dh,2
         mov  dl,0
         jmp  L1

L2:      ret
Affichertbl1 ENDP

Affichertbl2 PROC near
             ;call Clrscr
              mov       dl,60
              mov       dh,0

              mov       ebx,0
              mov       esi,0

L1:           cmp       ebx,50
              je        L2
              call      gotoxy
              mov       eax,[tab2+esi]
              call      writeint
              add       esi,type dword
              inc       ebx
              add       dl,5
              cmp       dl,200
              jne       L1
              add       dh,2
              mov       dl,60
              jmp       L1

L2:           ret
 
Affichertbl2 ENDP


;Comparer PROC near






Fin PROC near
    exit
   
Fin ENDP

END main




Visit www.nuxo.net et vive le monde du libre!!!
mardi 23 août 2005 à 13:01:28 | Re : Problème avec un code

patatalo

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
salut,

tu as un tableau de DWORD et jamais je ne vois reg*4 dans les acces.
si tu prog en 32bits, utilise sa capacité d'acces memoire.

lecture des elements du tableau ordre croissant ( esi = index )
mov esi,0
mov eax,[Tab+esi*4] ; lecture du premier element.
inc esi
mov edx,[Tab+esi*4] ; lecture du deuxième element.
cmp esi,50
je fin

lecture des elements du tableau ordre décroissant ( ecx = index )
mov ecx,50
loop1:
mov eax,[Tab+ecx*4-4] ; Tab[0..49] et 1 > ecx > 50.
loop loop1

@++
mardi 23 août 2005 à 14:26:40 | Re : Problème avec un code

showbiz_hurricanes

Membre Club
Merci pour cette réponse rapide

Le problème venait effectivement de l'accès mémoire! De plus l'affichage du tableau s'effectue correctement!
En bref mon programme fonctionne!


Merci

Visit www.nuxo.net et vive le monde du libre!!!


Cette discussion est classée dans : appel, tableau, mov, call, ebx


Répondre à ce message

Sujets en rapport avec ce message

Ancien code - CreateWindowEx ne fonctionne pas [ par TehWan ] Je ne comprends vraiment pas pourquoi CreateWindowEx ne fonctionne pas. Je code en ancien code avec MASM32. J'ai même essayé la nouvelle syntaxe (invo prob de gestion de souris [débutant] [ par hagakure ] bonjour a vous tousvoila je suis débutant en asm, et je doi coder un jeu de combat naval, dont voici les règles :-le champ de mouillage est de 10 sur les interruptions :( [ par yafuka ] Salut tt le monde..J'ai un petit probleme avec les interruptions. J'explique en quelques mots ce que j'essai de faire :J'aimerai tt simplement decreme Problème de création de Dialog [ par bni ] Bonjour,Suivant un tutoriel disponible sur le net, j'ai essayé de creer une boite de dialogue. Le seul problème, c'est qu'il n'y a qu'une console qui Différences ??? [ par Arecibo ] Voila je debute en assembleur et j'aimerais savoir quelles sont les différences entre :-> mov eax, ebx et mov eax, [ebx]-> mov esi, eax et mov [esi], Parcours tableau de HWND [ par AlexMAN ] Bonjour, Voila mon pb : Je declare un tableau de HWND comme suit :hwndCmd HWND 10 dup (?)Ensuite, je veux créer 10 boutons et stocker leur handle ds c BeginPaint code débutant [ par TRAX44 ] Bonjour, le problème est tout simple je comprends absolument pas ce qui marche pas. Le "programme" est censé créer une fenêtre est afficher du texte e HELP ! :'( [ par TheHacker ] Salut j'ai un probleme: voici mon code, il fonctionne correctement, activer le programme vous verres qu'a la fin i laffiche un MessageBox avec marqué mon programme bloque [ par rhumsek ] slt j'ai améliore mon programme mais il provoque une erreure lorsdu calcul de la somme des entiers saisi (sommeentier)POURTANT il exécute bien les de inversion de l'ordre d'uns string [ par VBFRANCE ] Je suis un jeune debutant dans l'assembleur.J'ai un petit prog pour afficher les valeur sous format binaire, mais je suis bloquer par un petit soucis.


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,515 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales