Sous-procedure externe en Assembleur ?

Signaler
Messages postés
140
Date d'inscription
mercredi 30 avril 2003
Statut
Membre
Dernière intervention
15 mai 2008
-
Messages postés
140
Date d'inscription
mercredi 30 avril 2003
Statut
Membre
Dernière intervention
15 mai 2008
-
débutant en c/c++, flash et asm- [mailto:cedbillard@voila.fr Me contacter]

Bonjour à tous,

J'utilise TASM et j'aimerais faire une sous procedure externe.

J'ai tester un exemple, (je n'utilise pas la pile pour les passages de parametre mais les registres), c'est a dire qu'un programme principal appelle une procedure qui lui appel une autre procedure (la sous-procedure). Au niveau de la compilation, il n'y a aucune erreur ni warning. Mais au lancement, cela ne marche pas (en fait, il execute la sous-procedure une fois mais c'est a la deuxieme (dans une boucle) que cela ne veut pas....

(je met extrn sousproc... dans la procedure puis call pour l'appelé)

Comment integré une sous-procedure externe ? (je ne veut pas la mettre en interne, que je souhaite reutilise la sous-procedure dans une autre procedure)...

Vous me suivez ?

Indice (lorsque je retire le jmp pour ma boucle tant que, ca marche (la sous procedure est appelé une seul fois), sinon, le message me dit que j'ai essayé d'essayer d'acceder à un endroit protege (ou que j'ai execute une instruction interdite, je ne sais plus)))...

Merci d'avance ! A bientot !

(au fait, mes messages sont-il placé dans la bonne rubrique ? (je ne sais pas trop dans quel rubrique ou placer les prog asm avec tasm))

merci

3 réponses

Messages postés
44
Date d'inscription
dimanche 2 mai 2004
Statut
Membre
Dernière intervention
15 avril 2005

Salut,

Tu peux mettre le code stp, parceque sans ça va pas être facile de t'aider ;o)


Voila, voila...
@+ Syst3mOf@Xav

Voir Redmond et mourir !
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
salut,

en fait, c'est que ta boucle doit etre executée quelques millions de fois et a mon avis ton esp est modifié a chaque occurence de la boucle.

Je m'explique:
--------------

loop2error:
push eax
call tasousroutine
jmp looptoerror

au bout d'un moment, on va depasser la capacité de la pile.

2eme possibilité:
----------------

tasousroutine:
; fait ce quelle a a faire.
ret 4 <- ca pourrait etre la que ca va pas.

loop2error:
call tasousroutine
jmp loop2error

cela pourrait etre du a une mauvaise declaration import/export et au bout d'un moment, on essai de depiler un element qui n'existe pas.
Messages postés
140
Date d'inscription
mercredi 30 avril 2003
Statut
Membre
Dernière intervention
15 mai 2008
1
débutant en c/c++, flash et asm- [mailto:cedbillard@voila.fr Me contacter]

Reponse un peu tardive !

Je pensais en fait qu'il fallait faire attention a quelque chose de particulier....

J'ai reussi a faire marcher ma sous-procedure en faisant un push dx puis pop dx entre l'appel de la procedure..... (pourtant je ne me sert pas de dx dans la sous-procedure)

Par contre, je l'ai reutilisé avec une autre procedure (qui comporte cette fois-ci une boucle (non infinie) avant l'appel de la sous-procedure. Et dans ce cas, j'ai la meme erreur qu'avant, mais quelque soit le push et pop des registres, l'erreur est toujours présente.

Enfin, c'est pas grave...mais si je trouve la raison, je répondrait pour terminer ce sujet....

Merci.........