Pourquoi est le porte Drapeau lors d'une soustraction lorsque le zéro est le minuend?

Au moment où j'écris ma propre petite bibliothèque pour les opérations arithmétiques et logiques pour les très grands entiers non signés. Pour améliorer les performances, j'ai décidé de mettre en œuvre certaines fonctions dans l'assemblée. Voici donc ma question.
Tandis que la soustraction de deux entiers non signés sur le porte Drapeau est réglé quand j'ai soustraire n'importe quel nombre de 0.

Mais pourquoi le Drapeau de portage mis dans cette situation? Le porte Drapeau est seulement lorsqu'un dépassement de capacité se produit, mais si j'ai soustraire un nombre à partir de zéro, je ne suis pas un dépassement de capacité.
Ou je me trompe?

  • Remarque: l'écriture de vos propres opérations en assemblée peut pas fournir à l'optimisation de vous anticiper. Le compilateur ne vérifie pas la ligne de l'assemblée et n'a aucun moyen de les optimiser. Vous pouvez trouver le compilateur va faire un meilleur travail d'optimisation si vous fournissez simplement logique du code C.
  • Merci pour vos conseils. Mais je ne fais pas assembleur en ligne. J'écris des pièces détachées en assemblée et je lien de cet objet fichiers avec le C-code.
  • Ensuite, il y a encore moins de chance il ne peut y avoir d'optimisation de l'assembleur routines au sein de l'ensemble de la structure de votre code. Ne vous méprenez pas, je ne suis pas frapper d'essayer de gagner de la vitesse à l'aide de l'assembleur, je pense que ça pourrait toujours être plus rapide aussi, mais toujours de comparer les performances de votre code associé à l'assemblage de la performance du code écrit dans droit en C avec les optimisations du compilateur (-O3 sur la plupart des -Ofast pour la version de gcc >= 4.6.0). Les compilateurs sont assez bien à l'optimisation d'aujourd'hui et 9 fois sur 10 la droite C est plus rapide.
  • OK, merci je vais garder cela à l'esprit. Le plus gros problème que j'ai, c'est le fait qu'il n'existe pas de manière simple en C pour vérifier l'état du pavillon et de l'utiliser dans d'autres opérations. Donc pour le moment j'utilise le bit le Plus Significatif du type entier non signé que le porte drapeau. Mais je ne suis pas vraiment satisfaite du résultat. C'est pourquoi je veux mettre en œuvre la logique de base de la soustraction et l'ajout en assembleur. Mais peut-être quelqu'un a une meilleure idée pour le faire. Je suis toujours ouvert à d'autres suggestions.
InformationsquelleAutor idlmn89 | 2016-07-03