afficher le tableau

Voir le sujet précédent Voir le sujet suivant Aller en bas

afficher le tableau

Message  didi le Ven 13 Fév 2009, 23:17

je voudrai afficher un tableau ordonné entre certain d'intervalle
voici mon code


Code:
extern printd
global main


;===============================
        section  .data
;===============================

val1            DD      8962,243,635,9376,5637,-7553,15
val2            DD      val2-val1      ; adresse de val2  - adresse de val1 = taille de val1 en bytes
borneif        DD      -40000          ; borne inferieur doit etre inferieur ou egale
bornesup        DD      +20000          ; a borne suerieur

;===============================
        section.code
;===============================
main :
            MOV    ESI,val1                ; ESI contient l'address serie de la serie de val
            MOV    EDI,6                  ; et donc l'address du premier nombre

interval:
            MOV    EAX,[ESI]              ; on compare si le nombre est dans l'intervalle   
            MOV    EBX,[borneif]
            CMP    EAX,EBX
            JL      suiv
            MOV    EBX,[bornesup]
            CMP    EAX,EBX
            JG      suiv
            MOV    ESI,EAX
            JMP    aff

suiv:      ADD    EDI,4              ; on regarde ici si on d�passe le tableau     
            CMP    EDI,val2
            JL      interval

aff:        PUSH    dword [ESI]
            CALL    printd

            MOV    eax,1
            MOV    ebx,0
            INT    0X80


il compil bien mais .......
affiche en exécutant "Segmentation fault"

quel qu'un peut m'aider ??

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: afficher le tableau

Message  Madrid le Ven 13 Fév 2009, 23:25

MOV EDI,6 ; et donc l'address du premier nombre

tu incrémente edi de 6 alors les valeurs dans le tableau sont déclarés en double (4 byts) se qui implique que pour se déplacer dans le tableau il faut incrémenter de 4.

première erreur maintenat faut voir la logique.

Madrid

Nombre de messages : 187
Prénom : Noor
Statut : étudiant 2RET
Localisation : Woluwé-Saint-Lambert
Date d'inscription : 28/12/2006

Revenir en haut Aller en bas

Re: afficher le tableau

Message  didi le Ven 13 Fév 2009, 23:39

Madrid a écrit:
MOV EDI,6 ; et donc l'address du premier nombre

tu incrémente edi de 6 alors les valeurs dans le tableau sont déclarés en double (4 byts) se qui implique que pour se déplacer dans le tableau il faut incrémenter de 4.

première erreur maintenat faut voir la logique.

ok j'ai changé
même chose avec 4

"Segmentation fault"
aide moi quel qu'un ...

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: afficher le tableau

Message  Madrid le Sam 14 Fév 2009, 01:05

Code:
interval:
            MOV    EAX,[ESI]              ; on compare si le nombre est dans l'intervalle 
            MOV    EBX,[borneif]
            CMP    EAX,EBX
            JL      suiv
            MOV    EBX,[bornesup]
            CMP    EAX,EBX
            JG      suiv
            MOV    ESI,EAX
            JMP    aff





je pense que dans ton label interval tu oublie d'incrémenter ESI pour passer à l'élément suivant du tableau.

Madrid

Nombre de messages : 187
Prénom : Noor
Statut : étudiant 2RET
Localisation : Woluwé-Saint-Lambert
Date d'inscription : 28/12/2006

Revenir en haut Aller en bas

Re: afficher le tableau

Message  nvs le Sam 14 Fév 2009, 01:44

l'erreur de segmentation a lieu quand tu fais :
Code:
push dword [ESI]
à la ligne 36. en effet, à ce moment, le registre esi contient la valeur 8962, reçue à la ligne 29 :
Code:
mov ESI,EAX
alors qu'à la ligne 22 tu avais :
Code:
mov EAX,[ESI]
et à la 18 :
Code:
mov esi,val1


pour éviter l'erreur de segmentation, enlève les crochets à la ligne 36 et écris :
Code:
push dword ESI
Cela ne résolvra cependant pas ton problème : seule la première valeur du tableau est affichée. et tant qu'à faire, pour éviter de futures erreurs de segmentation, ajoute des crochets à la ligne 33 de sorte à avoir :
Code:
cmp EDI,[val2]
et aussi, ajoute un espace entre section et .code à la ligne 15.





_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: afficher le tableau

Message  Contenu sponsorisé Aujourd'hui à 18:53


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum