[ASM] TD5

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

[ASM] TD5

Message  Invité le Sam 28 Mar 2009, 15:15

Je ne comprends pas un des exemple du dossier TD5?
celui-là, j'y ai marqué mon problème par des "???"
Code:

;==========================================================
; Programme qui simule la commande wc -l
; Aucun contrôle effectué (absence d'un fichier...)
; TD5N03 - JCJ
;==========================================================
extern printd
global main
;===========================
   section .bss
;===========================
h   RESD   1      ; le handle
;===========================
   section .code
;===========================
main
   MOV   EBP,ESP
   MOV   ECX,[EBP]
   CMP   ECX,1
   JG   .fichiers
   PUSH   dword   0   
   CALL   traitement
   JMP   .fin
.fichiers:
   DEC   ECX
   MOV   ESI,8
.argum:   PUSH   dword [EBP+ESI]
   CALL   openLectF
   MOV   [h],EAX
   PUSH   dword [h]
   CALL   traitement
   PUSH   dword [h]
   CALL   closeF
   ADD   ESI,4
   LOOP   .argum
   
.fin:   CALL   exit
   
;================================
; Procédure traitement : Compte le nombre de saut de ligne et l'affiche
; argument : le handle h
;================================
traitement :
   PUSH   EBP
   MOV   EBP,ESP
   SUB   ESP,4      ; réserve de la place pour le car. traité
   PUSHA
   MOV   ESI,0      ; au départ, pas de saut de ligne
.boucle:
   MOV   EAX,3      ; lecture
   MOV   EBX,[EBP+8]   ; sur le handle                      ???ici on passe le handle du fichier, or s'il n'y en a pas, il va chercher
   MOV   ECX,EBP                                                        ???quoi, moi j'ai calculé et j'ai trouvé que dans [EBP+8] se trouve
   SUB   ECX,4      ; Le résultat dans la var. locale  ???le nombre d'arguments(en l'occurrence ici 1 )
   MOV   EDX,1
   INT   0x80
   CMP   EAX,0
   JE   .fin      ; il n'y a plus rien à lire
   
   CMP   byte [EBP-4],10   ; Est ce un saut de ligne ?
   JNE   .boucle      ; sinon caractère suivant
   INC   ESI      ; si oui, un saut de ligne en plus   
   JMP   .boucle
.fin:   
   PUSH   ESI
   CALL   printd
   POPA
   ADD   ESP,4
   POP   EBP
   RET    4
;================================
; Procédure openLectF : ouverture d'un fichier en lecture
; argument : pointeur vers le nom du fichier
; retour : le handle
;================================
openLectF:
   PUSH   EBP
   MOV   EBP,ESP
   SUB   ESP,4      ; réserve de la place pour le handle
   PUSHA
   MOV   EAX,5      ; open
   MOV   EBX,[EBP+8]   ; adresse du nom de fichier
   MOV   ECX,0      ; lecture seule (O_RDONLY)
   INT   0x80
   MOV   [EBP-4],EAX   ; handle dans la var. locale.
   POPA
   MOV   EAX,[EBP-4]   ; valeur de retour
   ADD   ESP,4      ; récupère la var.locale
   POP   EBP
   RET   4
;================================
; Procédure closeF : fermeture d'un fichier
; argument : la handle
;================================
closeF:
   PUSH   EBP
   MOV   EBP,ESP
   PUSHA
   MOV   EAX,6      ; close
   MOV   EBX,[EBP+8]   ; le handle
   INT   0x80
   POPA
   POP   EBP
   RET   4
;================================
; Procédure exit : fermeture du process
; argument : la handle
;================================
exit:
   MOV   EAX,1
   MOV   EBX,0
   INT   0x80
   RET
; ==========================
[b]

merci

Invité
Invité


Revenir en haut Aller en bas

Re: [ASM] TD5

Message  nvs le Sam 28 Mar 2009, 16:02

pourrais-tu être plus clair. que ne comprends-tu pas ? d'après ce que je comprends de ce que tu as écrit dans le code, tu sembles t'inquiéter du comportement d'une fonction (traitement) à un argument lorsqu'on l'invoque sans argument Shocked est-ce bien raisonnable ? te poses-tu le même genre de question en java ou en cobol Question





Mad

_________________

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: [ASM] TD5

Message  Invité le Sam 28 Mar 2009, 16:55

traitement :
PUSH EBP
MOV EBP,ESP
SUB ESP,4 ; réserve de la place pour le car. traité
PUSHA
.boucle:
MOV EAX,3 ; lecture
MOV EBX,[EBP+8] ; sur le handle
MOV ECX,EBP
SUB ECX,4 ; Le résultat dans la var. locale
MOV EDX,1
INT 0x80
CMP EAX,0
JE .fin ; il n'y a plus rien à lire
MOV EAX,4 ; écriture ??? Je ne vois pas ce qu'il va afficher à l'écant s'il n'y a pas de fichier
MOV EBX,1 ; à l'écran ???On sait que s'in n'a aucun fichier en argument il lit au clavier
MOV ECX,EBP ; imprime le caractère qui se trouve ??? Merci.
SUB ECX,4 ; dans la var. locale
MOV EDX,1
INT 0x80
JMP .boucle
.fin:
POPA
ADD ESP,4
POP EBP

Invité
Invité


Revenir en haut Aller en bas

Re: [ASM] TD5

Message  Invité le Sam 28 Mar 2009, 17:11

je suis en train de faire la factorielle du td5, ça ne marche pas encore mais je voulu testé la valeur de mon argument qui dans le cas du calcul de la factorielle doit être un nombre en l'affichant le nombre en question grâce à printd, mais ça m'affiche des resultats pas très reconfortants, voici le code de mon pgm de test:

Code:

...
main
   MOV     EBP,ESP      ; EBP pointe sur le sommet de la pile
   MOV     ECX,[EBP]   ; ECX = nombre d'arguments � afficher -1
   MOV     ESI,8      ; ESI pointe le premier argument � afficher
   MOV  EAX,dword [EBP+ESI]   ; Place le nombre sur la pile
   ADD  AL,30h
        cbw
   cwd
   PUSH  EAX       ; Place le nombre sur la pile
   CALL  printd
...

et si je fais : ./test 5 => ça devrais m'afficher 5 à l'ecran mais ce n'est pas le cas
Merci.

Invité
Invité


Revenir en haut Aller en bas

Re: [ASM] TD5

Message  Invité le Sam 28 Mar 2009, 18:05

J'ai trouvé mon erreur.
En fait j'essayait d'afficher la valeur pointé par [ebp+8], je pensait qu'il s'agissait de l'argument, or il s'agissait du ponteur vers mon argument
Donc ceci est resolu. Merci à moi même.

Invité
Invité


Revenir en haut Aller en bas

Re: [ASM] TD5

Message  Contenu sponsorisé Aujourd'hui à 12:34


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