Débordement/dépassement de capacité en nombres non signés
Donc, si vous avez un report de 1 sur plus avec des nombres non signés, vous avez débordé, et si vous avez un report de 0 avec la soustraction, vous avez underflowed. Cela fonctionne dans tous les cas, si?
Si vous ne 5-0:
0101
-0000
=
0101
+(1111 + 1)
=
0101
+0000
= 0101... il y a un report de zéro ici, au lieu de 1. Comment fait-on tenir compte de ce cas? Est-il un autre moyen de le faire?
(à l'aide d'architecture MIPS, ou quoi que ce soit d'autre)
---Edit
Grâce Amadan. Je comprends que, quoique. Mon problème est juste que zéro semble être un cas particulier. Il ne semble pas suivre qu'un nombre normal de faire: dans mon exemple ci-dessus, il n'y a pas de report de 1.
Je suis en train de faire la conception de circuits de travail avec un ALU pour le moment et essayer de mettre en œuvre la détection de débordement, lorsque ce cas, qui ne suit pas ce que les autres font.
Nous supposons qu'avec la soustraction, le second opérande est preinverted (complément à deux) avant d'aller dans l'ALU (alors ajouté à la première opérande). Donc, chaque fois que le "invert_b" pour la soustraction est définie sur 1, b est inversée et nous supposons que le cas, nous sommes de vérification pour la soustraction, ce qui devrait avoir un report de 1.
- Je ne comprends pas la question. L'ajout d'un positif et un nombre négatif ne peut jamais résulter en vertu de l'/débordement.
- Ajouté un peu plus d'info.. j'espère que ça efface tout cela.
- Ce que @davin a dit. Je ne sais pas comment ils font dans les Processeurs, mais en l'inversant un zéro doit toujours vous donner un report (1111 + 1 = (1)0000), donc dire que -0 = 0 n'est pas tout à fait correct si vous utilisez en complément à deux pour la soustraction fins.
- Mais si nous convertissons en complément à deux avant de faire la soustraction, 0 est juste 0000 encore.. et puis on ajoute par la suite, et depuis le circuit pense que nous sommes en soustrayant il sera à la recherche de dépassement de capacité si pas de porter... c'est là que je suis confus. J'espère que je ne suis pas donnant sur quelque chose que vous les gars ont déjà mentionné.
- Ce n'est pas seulement 0000 à nouveau. La soustraction des causes de l'additionneur pour ajouter le numéro d'origine et 1111+1 qui est 0000 avec un report de 1, de sorte que le porteur est à l'opposé de la normale en cas d'ajout de 0000. Par conséquent, le résultat est inverse, ce qui est logique, car alors il y aura des underflow le forum, il y aurait dépassement de capacité dans le cas d' +0. Car, dans le cas original de +0, il ne peut pas être un report de 1, il n'y aura pas de débordement, et par symétrie le cas d' +0000 avec un report de 1 portera toujours 1 et donc jamais underflow.
Vous devez vous connecter pour publier un commentaire.
Je crois que le msbit mener à bien peu sur son propre couvre pas signé vous de regarder pour voir si la retenue à la msbit et de le mener à bien différents.
5-0 ne déborde pas, parce que le résultat correspond au nombre de bits disponibles. De la même manière que 15-1 ne déborde pas un 4 bits pour les nombres signés
5 - 0 = 0101 + 1111 + 1
si 5 - 0 porte certainement un 1, puisque c'est une soustraction qui n'est pas un débordement
15 - 1 = 1111 + ~1 avec la retenue dans le jeu
de soustraction avec un 1 n'est pas un entier non signé de débordement comme vous l'avez dit
De même -1 - 1 = 1111 + ~1 avec la transporter dans l'ensemble de peu de
le transporter dans le dernier bit est à 1, le carry out est un 1 correspondent, pas signé de débordement.
8 + 8 = 1000 + 1000 avec la réaliser en clair
unsigned débordement.
hmmm 4 + 4
unsigned ajouter le mener à bien est de 0, ce n'est pas un entier non signé de débordement. mais ceci est une signature de débordement car le transporter dans le msbit et de mener à bien différents. +4 + +4 = +8, dans un 4 bits signés système, vous ne peut pas représenter +8, donc signé le dépassement est exacte.
Peu importe le nombre de bits de l'étrange nombres sont tous des zéros et de un et le reste de zéros (0 et 8 ou -8 4 bits.
Faire un graphique à l'aide de 2, 3, ou 4 bits les numéros de toutes les combinaisons et rechercher manuellement par tous les d'entre eux de voir qu'ils font sens. ce que vous trouverez à l'échelle de n'importe combien de bits de large, 100 bits additionneur fonctionne comme un 10 bits additionneur...
Le code qui a généré le ci-dessus
Maintenant, votre question était de parler de nombres non signés oui? donc vous ne pouvez pas les soins sur le V bits, ni la moitié droite, la signature de la moitié.
Voici quelques HDL/RTL pour un petit de 16 bits processeur j'ai mis en place:
J'ai vu le msbit chose pour la signature de débordement dans une autre logique et ne pourrais pas trouver un cas où elle na pas correspondre à la réaliser en vs réaliser méthode en essayant toutes les combinaisons possibles dans un tête à tête d'analyse.
Si je suis allé trop loin avec la réponse je n'ai pas l'esprit en l'attachant au début où il montre que la 5 - 0 a 1 comme un report de 1, ce qui pour une soustraction n'est pas un dépassement de capacité. La réponse longue, car il peut être difficile pour envelopper votre tête autour signé /non signé et comment l'additionneur fonctionne dans la logique en général. L'additionneur ne sais pas ou se soucient signés ou non, il ne se soucient ajouter vs soustraire, avec soustraire vous inversez le deuxième opérande, inverser le transporter dans le lsbit et de le transporter hors de la msbit (pensez à ajouter, ajouter à porter, des sous et des sous avec les transporter). L'signé /non signé) prend soin si lui-même (la beauté de complément à deux). La réduction de la ci-dessus pour un unsigned seulement la discussion en fait plus de la moitié d'aussi simple que la signature de débordement n'est pas (que) c'est évident (non signés à débordement) pour l'observateur occasionnel.
J'espère bien sûr que j'ai coupé et collé le débogage HDL , aurez beaucoup de réponses et/ou corrections si je n'ai pas...j'ai passé quelques jours à convaincre moi-même de tout ce qui précède et en comparant les résultats à d'autres processeurs, j'ai eu accès, etc. J'espère que cela vous permet d'économiser quelques jours.
Pas un expert, mais l'intégralité de la déclaration sur la soustraction semble erroné.
Vous pouvez mettre en œuvre la soustraction de deux manières: directement, comme la soustraction ou addition du complément à deux.
Si vous allez avec en complément à deux outre, alors c'est comme vous dites: porter de 1 est underflow.
Si vous soustrayez directement, alors 1 est underflow:
Il peut y avoir d'autres façons équivalentes de la conception de détection de débordement de parts pour les additionneurs, mais le plus commun est
Cin XOR Cout
. Voir, par exemple, à la fin de la conférence 4 http://cs.nyu.edu/~gottlieb/courses/2007-08-fall/arch/class-notes.htmlIl vérifie simplement si les numéros ajoutés (si quelque chose est renversé pour 2 en complément ou non n'a pas d'importance, nous nous intéresserons à ces valeurs par la suite) effectuer dans le dernier chiffre du calcul, mais pas dans les chiffres au-delà de la pris en charge de bits de taille, ou l'inverse.
Cela a un sens, parce que si ils transportent dans et pas le résultat doit être négatif (puisque le MSB doit être de 1), mais les opérandes doivent être positifs (car si ils étaient négatifs, il y aurait de réaliser). C'est la définition de débordement, depuis deux positifs ne peut pas additionner à un négatif.
C'est un modèle signé toutefois, je ne suis pas sûr si c'est ce que vous cherchez, puisque vous avez mentionné non signé. Si c'est le cas, alors vous avez raison, le plus simple, le modèle a dépassement de capacité lors de la mener à bien est de 1 (c'est l'équivalent de ce qui précède, si vous considérez l'ajout d'avoir un supplément de 0 pour chacun des opérandes' ESM, puis le réaliser sera toujours 0 et il y a dépassement de ssi le transporter dans est 1. Le transporter dans ce cas, c'est accomplir dans notre modèle).
Soustraction résultats de dépassement de capacité si la valeur est négative. Nous pouvons encore obtenir une équivalence si l'on considère le positif opérande d'avoir un ajouté MSB 0 et le négatif opérande de 1 (extension du signe). Puis nous sommes négatif lorsque le bit de poids fort du résultat est 1. Ce qui se passe ssi le réaliser dans notre modèle d'origine (le transporter dans le nouveau modèle) est 0, car alors seulement le bit de poids fort du résultat dans le nouveau modèle de rester 1.
Vous exemple n'est pas une exception: 0101 + 1111 + 1 = 0101 avec un report de 1, et donc pas de dépassement de capacité, puisque le résultat est positif.