RECURSIVITE EN ASM

cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 - 11 août 2005 à 22:38
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 13 août 2005 à 10:06
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/33202-recursivite-en-asm

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 août 2005 à 10:06
La récursivité implique:
- 1 ou plusieurs PUSH (EIP au minimum).
- 1 JMP.
- 1 ou plusieurs POP.
- 1 JMP de retour.
On peut donc poser comme principe général que l'itération sera quasi toujours plus performante que la récursivité.
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
13 août 2005 à 09:43
Fibonacci est pourtant l'exemple type de fonction qu'on ne fait pas récursivement. Ici le débordement arrivera très vite
cs_Nasman Messages postés 202 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 29 septembre 2008 3
12 août 2005 à 12:04
La récursivité génère un système de boucles imbriquées. Il est souvent plus économique d'utiliser une boucle, comme par exemple
mov cx,n
mov ax,1
fact mul ax,cx ;effectue fact(n)=n.fact(n-1)
loop fact ;si cx>0 on continue sinon fini
;ax contient le résultat
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 août 2005 à 11:20
salut,

j'aime pas trop la recursivité par call car il y a des risques de debordement de pile ( surtout en 16 bits ) ce qui oblige a calculer le nombre max de recursivité par rapport à la taille de la pile.

@++
cs_Nasman Messages postés 202 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 29 septembre 2008 3
12 août 2005 à 09:34
Merci pour la source (plus il y en aura sur le site et plus on pourra progresser). Cependant je trouve dommage que pour un tutoriel la partie récursivité soit un peu noyée dans le reste. C'est peut-être le prix à payer pour avoir un programme complet qui fonctionne et qui affiche des résultats.

Pour ma part je pense qu'il serait préférable (pour une question de clarté)de scinder les différents éléments du programme en plusieurs tutoriels du genre :
-comment saisir des données au clavier
-comment afficher un message
-comment convertir une chaine de caractère en nombres
-comment convertir un nombre en chaine ascii
-comment appeler un sous programme
-la gestion de la pile
-le passage de paramètres entre plusieurs applications (asm et langage évolué).
-optimisation d'un programme (les trucs et astuces genre xor ax,ax...)en vue de le rendre plus compact ou plus rapide

En règle générale, moins il y en a dans un programme et plus il est facile à comprendre - c'est le but recherché d'un tutoriel.

Pour terminer il est vrai que le 16 bits est un peu dépassé à l'heure des 32 et 64 bits mais il est vrai que l'enseignement de l'assembleur s'effectue trop souvent sur du 16 bits.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 août 2005 à 22:43
On se demande pourquoi les gens associent ASM et moyen-âge, c'est pourtant pas obligatoire.
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
11 août 2005 à 22:38
pourquoi c'est en 16 bits ?
Rejoignez-nous