Sous-procedure externe en Assembleur ?

cs_cbil Messages postés 140 Date d'inscription mercredi 30 avril 2003 Statut Membre Dernière intervention 15 mai 2008 - 12 janv. 2005 à 12:40
cs_cbil Messages postés 140 Date d'inscription mercredi 30 avril 2003 Statut Membre Dernière intervention 15 mai 2008 - 16 janv. 2005 à 15:55
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

SystemOfAXav Messages postés 44 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 15 avril 2005
12 janv. 2005 à 14:29
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 !
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
12 janv. 2005 à 15:34
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.
0
cs_cbil Messages postés 140 Date d'inscription mercredi 30 avril 2003 Statut Membre Dernière intervention 15 mai 2008 1
16 janv. 2005 à 15:55
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.........
0
Rejoignez-nous