9
votes

Boucle, pondération, loopne?

Quelle est la différence entre les instructions de montage LOOP , LOOPE et LOOPNE ?


4 commentaires

N'utilisez pas ces instructions; Ils sont très lents sur les processeurs modernes. Utilisez plutôt une ramification à la main.


@Alex Strange: Avez-vous des preuves pour soutenir votre déclaration? Merci.


@Timotei dolean: Voir les tableaux d'instructions de agner.org/optimize . Un manuel de la CPU qui traite du microcode (et, espérons-le, certains) expliquera le raisonnement.


@AlexStrange: associé: Pourquoi l'instruction de boucle est-elle lente? Ne pouvait pas l'avoir implémenter efficacement? a quelques numéraires d'UOP et des numéros de débit pour LOOP sur diverses microarchitectures récentes et une partie de l'histoire de la manière dont nous avons fini dans cette Catch-22 Situation de: Personne ne l'utilise car il est lent / ne vaut pas la peine de gagner plus rapidement parce que personne ne l'utilise. Si c'était rapide, il enregistrerait souvent la taille du code et être idéal pour ADC des boucles (surtout sur les processeurs avec des stands drapeaux partiels comme NEHALEM et plus tôt.)


4 Réponses :


5
votes

temps pour un Référence Google Books

EDIT: Synopsis à partir de lien: la pière et la loopne sont essentiellement des instructions de boucle avec un chèque supplémentaire. Des boucles de poire "tandis que le drapeau zéro", ce qui signifie qu'il va boucler tant que zéro drapeau ZF est un et l'incrément n'est pas atteint et que l'incrément n'est pas atteint et que la loopne boucle "tout en ne pas zéro drapeau", ce qui signifie qu'il continue la boucle tant que zf est zéro et le L'incrément n'est pas atteint. N'oubliez pas qu'aucune de ces instructions n'affecte intrinsèquement le statut de ZF.


1 commentaires

Je crois qu'il est préférable de non seulement fournir un lien, mais citer le matériel pertinent de la source, si le lien devient jamais invalide.



20
votes

LOOP DÉCTRESSEMENTS ECX et Vérifications Si ECX n'est pas nul, si cette condition est remplie, il saute à l'étiquette spécifiée, sinon tombe.

LOOPE DÉCTRENTIONS ECX et vérifie que ECX n'est pas zéro et zf est défini - si ces conditions sont remplies, il saute au label, sinon tombe.

La loopne est la même que la pière, sauf que cela nécessite que zf ne soit pas défini (c'est zéro) pour faire le saut.


5 commentaires

Aussi pas demandé que j'aimerais souligner que toutes les instructions de boucle sont beaucoup plus lentes que la contrepartie Dec ECX / JNZ. Ceci est conçu comme une boucle ne devrait aujourd'hui être utilisée que pour les boucles d'étalonnage des délais utilisés pour les conducteurs matériels et similaires.


@Nilspipenbrinck: sur quels processeurs est-il plus lent? Quelle est votre source?


@Janustroelsen, c'est plus lent à partir du 80486. Sur les derniers processeurs, il est Beaucoup plus lent. Source: agner.org/optimize manuel # 2.


@shachartooth, parlant de la pière, comment la décrémentation peut-elle être non nulle et zf? La pière n'a-t-elle aucune incidence sur le drapeau ZF?


Répondre à ma propre question. Après avoir vérifié dans GDB, je peux confirmer qu'aucune des instructions de boucle (boucle, de pondération, de loopne) affecte le drapeau ZF lorsqu'ils décontent le compteur ECX. Maintenant ça a du sens.



0
votes

Avez-vous essayé de le chercher dans une référence d'instructions, par exemple dans Celui-ci par Intel ?


0 commentaires

1
votes

Les instructions de boucle, ainsi que JCXZ / JECXZ sont un peu lentes; Cependant, ils ont toujours leur place dans le code moderne.

Une grande vitesse n'est pas toujours une préoccupation dans les boucles. Par exemple, si nous exécutons une boucle une seule fois lors du programme init et le nombre d'itérations est petit, le temps nécessaire ne sera pas remarqué.

Un autre exemple est une boucle où les fonctions de l'API Windows sont appelées; Le temps passé dans l'appel de l'API rend probablement le temps d'exécution de la boucle triviale. Encore une fois, cela s'applique lorsque le nombre d'itérations est petit.

Considérez ces instructions comme «un autre outil dans votre boîte à outils»; Utilisez le bon outil pour le travail;)


0 commentaires