[LMI td4

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

[LMI td4

Message  NicoM le Jeu 08 Mai 2008, 18:37

Bah voila, presque impossible ce TD4 mais on persevère ^^

Salut avant tous.

Voilà, j'explique un peu :
Pour le palindrome, si je comprend bien, lorsqu'on fera : ./palindrome fichier fichier2 fichier3 ...
fichier 1 2 3 sont les argument passer sur esp ? donc argv[0] -> fichier?

mov ebp,esp
mov DWORD eax,[ebp]
mov DWORD [argc],eax
add ebp,4 ; je passe argc pour aller sur argv[0] non? C'est dit que chaque descri ou .. fait 4 octets.

Ensuite je dios ouvrir le fichier, faire un lseek pour se placer au début, lire une ligne et la garder, voir si c'est un palindrome, si oui on l'affiche sinon on passe a la ligne suivant, lorsque plus de ligne, fichier suivant.
C'est un peu le raisonnement?

Moi je l'ouvre je fais un lseek et au moment de lire, j'ai un soucis !
Lire une ligne? Je ne vois pas comment et les autres posts m'aide vraiment pas Sad
C'est bien en faisant un read interrupt. pour lire et garder?

Pour l'instant, j'essaye juste d'afficher le contenu de plusieurs fichiers en param et ya rien qui va.

Merci à tous.

NicoM

Nombre de messages : 116
Prénom : Nicolas
Statut : étudiant 3ieme Industrielle
Localisation : Bascule
Date d'inscription : 07/12/2007

Revenir en haut Aller en bas

Re: [LMI td4

Message  Gustavo le Jeu 08 Mai 2008, 18:51

Salut,

En fait tu dois lire une ligne caractère par caractère (donc par 1 byte et donc 1 dans ecx) et mettre chaque caractère lu dans un variable locale (perso j'ai fait un sub esp,1024 dans la pile et je n'ai eu aucun problème) jusqu'a la fin de la ligne (jusque au Line Feed donc (caractère 10 ). Ensuite tu vérifies dans ta variable locale si c'est un palindrome (de nouveau caractère par caractère), tu fais les traitements qui vont bien et tu passe à la ligne suivante. Et ainsi de suite jusqu'à la fin du fichier.

A propos de lseek, c'est pas vraiement utile vu que, par défaut, tu te trouves au début du fichier Wink

++

Gustavo

Nombre de messages : 260
Age : 29
Prénom : Renaud
Statut : étudiant 4SEC
Date d'inscription : 10/01/2008

Revenir en haut Aller en bas

Re: [LMI td4

Message  nvs le Jeu 08 Mai 2008, 19:01

je tiens quand même à signaler, au risque d'être désagréable, que l'énoncé a été diffusé il y a 4 semaines. vous avez donc eu 28 jours, 4 (ou 3 selon les congés) labos pour interroger vos profs, sans compter les séances de remédiations du midi. tout ça pour faire, au minimum, un exercice d'évaluation... Suspect

sinon,Gustavo semble avoir tout compris Smile

_________________

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: [LMI td4

Message  NicoM le Jeu 08 Mai 2008, 19:06

nvs a écrit:je tiens quand même à signaler, au risque d'être désagréable, que l'énoncé a été diffusé il y a 4 semaines. vous avez donc eu 28 jours, 4 (ou 3 selon les congés) labos pour interroger vos profs, sans compter les séances de remédiations du midi. tout ça pour faire, au minimum, un exercice d'évaluation... Suspect

sinon,Gustavo semble avoir tout compris Smile

Dsl si je n'avais pas que asm et pour être honnête, avec ce que je comprends, ce n'est pas 4 semaines mais 4 mois qu'il me faudrait.
C'est le cours ou je travaille le plus et où^j'avance le moins.
Je ne suis pas fait pour l'asm ^^ Very Happy

Merci quand même Gustavo en passant, je pense avior comprit maintenant Smile

NicoM

Nombre de messages : 116
Prénom : Nicolas
Statut : étudiant 3ieme Industrielle
Localisation : Bascule
Date d'inscription : 07/12/2007

Revenir en haut Aller en bas

Re: [LMI td4

Message  NicoM le Jeu 08 Mai 2008, 19:08

Juste une petite question aussi.

mov ebp,esp
mov DWORD eax,[ebp]
mov DWORD [argc],eax
add ebp,4

Je place bien dans argc le nombre d'argu?
add ebp,4 me fait bien passer sur argv[0]?

et donc a chaque fois que j'ai fini avec un fichier, je dec argc aussi?

Merci et dsl encore ^^

NicoM

Nombre de messages : 116
Prénom : Nicolas
Statut : étudiant 3ieme Industrielle
Localisation : Bascule
Date d'inscription : 07/12/2007

Revenir en haut Aller en bas

Re: [LMI td4

Message  nvs le Jeu 08 Mai 2008, 19:16

NicoM a écrit:Juste une petite question aussi.

mov ebp,esp
mov DWORD eax,[ebp]
mov DWORD [argc],eax
add ebp,4

Je place bien dans argc le nombre d'argu?
add ebp,4 me fait bien passer sur argv[0]?
oui, mais attention, argv[0] est le nom du programme (si tu utilises ld), pas le premier argument facultatif.

NicoM a écrit:et donc a chaque fois que j'ai fini avec un fichier, je dec argc aussi?
à condition que tu aies réservé suffisamment de place en argc : argc db 4, ou argc dd 1, ou argc resd 1, par exemple (attention, variables globales...) et que tu fasses dec dword [argc] Smile

par ailleurs, je confirme que ce dernier td micro met en oeuvre des notions relativement complexes. dessiner la pile aide énormément Exclamation

_________________

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: [LMI td4

Message  Wark le Jeu 08 Mai 2008, 19:16

http://pit-it.virtuaboard.com/microprocesseur-f5/lmi-echo-t1404.htm

Sur ce post, tu trouveras un programme bouclant sur les arguments passés en paramètres. Smile

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

Re: [LMI td4

Message  NicoM le Jeu 08 Mai 2008, 20:30

Toujours quelques soucis, voila mes petits bouts de codes parce que j'en peux plus.
Code:

fichier resd 1
argc resd 1

main :
        mov ebp,esp            ;on recoit les arguments.
        mov dword eax,[ebp]    ;eax prend l'adresse de ceux-ci.
        mov dword [argc],eax    ;on garde dans argc ceux-ci.
        add ebp,4              ;pour sauter argv[0].

boucleArgc :
;============================
        cmp dword [argc],1      ;si pas de param.
        je returnFinal
        add ebp,4
        mov eax,[ebp]          ;on prend le prochain argv.
        mov [fichier],eax    ;on garde dans fichier cet argv.

La si j'ai bien comprit, fichier pointe bien vers le premier argument qui est censé être un nom de fichier ok?
Code:

        descr resd 1

        mov eax,5              ;open.
        mov ebx,fichier      ;nom fichier.
        mov ecx,10b            ;lecture & ecriture.
        int 80h                ;exéc.

        mov [descr],eax        ;retient le descripteur

La j'ouvre le fichier et je garde dans descr eax qui pointe vers le début, bien ca?
Ensuite je dois lire une ligne dans ce fichier :

Code:
mov dword eax,[descr]  ;eax prend le descripteur.
        cmp byte [eax],10      ;si lf, on vérifie si palindrome.
        je palindrome

        mov eax,4              ;ecriture.
        mov ebx,ligne          ;dans ligne
        mov ecx,[descr]        ;ce qu'il y a dans ligne.
        mov edx,1              ;taille.
        int 80h                ;exé...

        inc dword [descr]
        jmp lireLigne


Je lis une ligne que je stock dans ligne tant que je ne rencontre pas un lf.

Ensuite je vérifie si c un palin, si oui jaffiche la ligne sinon je lis la prochaine.

Je suis sur le bon chemin?

Merci à tous !! Very Happy

NicoM

Nombre de messages : 116
Prénom : Nicolas
Statut : étudiant 3ieme Industrielle
Localisation : Bascule
Date d'inscription : 07/12/2007

Revenir en haut Aller en bas

Re: [LMI td4

Message  Wark le Jeu 08 Mai 2008, 20:40

Tu n'écris pas une ligne, tu lis dans le fichier un byte qui correspond à un caractère. Tant que ce caractère n'est pas 10 (retour charriot) ou rien du tout, tu continues à lire et à stocker dans une variable.

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

Re: [LMI td4

Message  NicoM le Jeu 08 Mai 2008, 20:47

Wark a écrit:Tu n'écris pas une ligne, tu lis dans le fichier un byte qui correspond à un caractère. Tant que ce caractère n'est pas 10 (retour charriot) ou rien du tout, tu continues à lire et à stocker dans une variable.

v essayer... ca m'embrouille bien quand meme Sad

NicoM

Nombre de messages : 116
Prénom : Nicolas
Statut : étudiant 3ieme Industrielle
Localisation : Bascule
Date d'inscription : 07/12/2007

Revenir en haut Aller en bas

Re: [LMI td4

Message  NicoM le Jeu 08 Mai 2008, 20:54

f
Code:
ichierCourant :
;============================
        mov eax,5              ;open.
        mov ebx,fichier        ;nom fichier.
        mov ecx,10b            ;lecture & ecriture.
        int 80h                ;exéc.

        mov [descr],eax        ;retient le descripteur.

        mov esi,0
        mov eax,[ligne]
        mov [ligne+esi],eax

lireLigne :
;============================
        mov dword eax,[descr]  ;eax prend le descripteur.
        cmp byte [eax],10      ;si lf, on vérifie si palindrome.
        je palindrome

        mov dword eax,[descr]
        cmp byte[eax],0
        je finArgc

        mov eax,3              ;lire.
        mov ebx,descr          ;fichier.
        mov ecx,1              ;taille.
        int 80h                ;exé...

        mov [ligne+esi],eax
        inc esi

        inc dword [descr]
        jmp lireLigne

comme ca?

NicoM

Nombre de messages : 116
Prénom : Nicolas
Statut : étudiant 3ieme Industrielle
Localisation : Bascule
Date d'inscription : 07/12/2007

Revenir en haut Aller en bas

Re: [LMI td4

Message  Wark le Jeu 08 Mai 2008, 21:52

Tu ne lis rien là Smile

Tu dois "ouvrir"
"Lire un byte"
Comparer ce byte à 10 ou à "rien du tout"
Tant qu'il n'est pas 10 ou rien du tout, tu relis un caractère et tu ajoutes celui là à une "ligne".
Dès que tu as un 10 ou rien du tout, tu traite ta "lign" dans une fonction qui regarde si c'est un palindrome.
Si c'est le cas, tu affiches, sinon, tu passes à la suite.

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

Re: [LMI td4

Message  NicoM le Jeu 08 Mai 2008, 21:55

mwai, ca parait si simple Sad v bosser, jdirai quoi plus tard.

Merci en tk Smile

NicoM

Nombre de messages : 116
Prénom : Nicolas
Statut : étudiant 3ieme Industrielle
Localisation : Bascule
Date d'inscription : 07/12/2007

Revenir en haut Aller en bas

Re: [LMI td4

Message  Contenu sponsorisé Aujourd'hui à 18:57


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