7
votes

Comment la CPU effectue-t-elle la soustraction?

J'ai des doutes de base, mais chaque fois que je suis assis à essayer mes mains lors de questions d'entrevue, ces questions et mes doutes apparaissent.

dire A = 5, b = -2. En supposant que A et B sont 4 octets, comment la CPU fait-elle le A + B code> Ajout? P>

Je comprends que A a aura un bit de signalisation (MSB) comme 0 pour signifier une valeur positive et B aura un bit de signe comme 1 pour signifier un entier négatif. p>

Maintenant, je veux imprimer A + B code>, le module d'addition de l'ALU ( Unité de logique arithmétique) Vérifiez d'abord un bit de signalisation, puis décidez de faire la soustraction, puis de suivre la procédure de soustraction. Comment la soustraction est terminée sera ma prochaine question. P> xxx pré>

Je veux faire a - b code>. L'ordinateur prendra le complément de B et ajoutez le complément de B + 2 et renvoyez ceci (après avoir rejeté le bit supplémentaire à gauche)? P>

A = 2
B = 5


2 commentaires

L'Alu regarde comme ceci: en.wikipedia.org/wiki/...


Les nombres négatifs sont le complément du nombre positif correspondant - pas seulement un changement du bit de signalisation.


5 Réponses :


8
votes

Vous êtes un peu mal dans la partie du bit des signes. Ce n'est pas simplement un bit de signe - chaque numéro négatif est converti en complément de 2. Si vous écrivez: xxx

Le compilateur lors de la compilation à Binary le fera: xxx

maintenant quand il veut ajouter 5, le ALU obtient 2 numéros et les ajoute, une addition simple.

Lorsque l'Alu obtient une commande de soustraire, il est donné 2 numéros - il ne fait pas à chaque bit du deuxième numéro et fait une addition simple et ajoute 1 de plus (parce que le complément de 2 n'est pas à chaque bit +1).

La chose de base ici à retenir est que le complément 2 a été sélectionné pour exactement le but de ne pas avoir à faire 2 procédures distinctes pour 2+ 3 et pour 2 + (- 3).


0 commentaires

16
votes

Toute la raison pour laquelle nous utilisons 2's-complément est que l'addition est la même si le Les chiffres sont positifs ou négatifs - il n'y a pas de cas spécial à considérer, comme s'il existe avec 1's-complément ou Signé-Magntitude Représentations.

afin de trouver a-b , nous pouvons simplement nier b et ajouter; c'est-à-dire que nous trouvons a + (-b) , et parce que nous utilisons 2's-complément, nous ne nous inquiétons pas si (- b) est positif ou négatif , parce que l'ajout-algorithme fonctionne de la même manière.


2 commentaires

Dans le complément de 1, il n'y a pas de cas particulier à considérer non plus. Vous ajoutez simplement les 2 numéros et ajoutez le report. Seule la signification doit être prise en charge du bit des signes


Notez que certaines ISAS (comme x86) ont une sortie de drapeau de transport définie si la soustraction réelle aurait un emprunt, pas un hypothétique A + (-B) addition. Cette possibilité de mise en œuvre ne change pas le fait que (- 1) - (-2) - (-2) (i.e. 0xff - 0xfe ) donne cf = 0. Le bras est le contraire: après la soustraction, le drapeau C est un ! Emprunter résultat, et l'instruction SBC se comporte en conséquence.



8
votes

Pensez en termes de deux ou trois bits, puis de comprendre que ces choses augmentent jusqu'à 32 ou 64 bits jusqu'à 32 ou 64 ou thamany.

Tout d'abord, commencez par décimal p> xxx pré> p > Afin de faire cela, nous allons avoir des "transporter celui" "Porter" " P>

01 1
 0101
+0101
=====
 1010


0 commentaires

2
votes

ino-complément notation: pas b = -b -1 ou -b = (non b) + 1 . Il peut être vérifié sur un ordinateur ou sur papier.

AT-B = A + (non B) + 1 qui peut être effectué avec:

  • 1 bittwise pas
  • 1 incrément
  • 1 ajout

    Il y a un truc sur l'incrémentation inefficace et la décrémentation en utilisant juste des non pas et des négations.

    Par exemple, si vous commencez par le numéro 0 dans un registre et effectuez:

    pas, neg, pas, neg, pas, neg, ... le registre aura des valeurs:

    -1, 1, -2, 2, -3, 3, ...

    ou comme autre 2 formules: xxx


0 commentaires

3
votes

Est-ce que le module d'addition d'ALU (unité logique arithmétique) vérifie d'abord le bit de signalisation, puis décidez de faire la soustraction, puis de suivre la procédure de soustraction

Non, dans son complément de deux et deux, il y a aucune différenciation entre ajouter / soustraire un nombre positif ou négatif . L'alu fonctionne de la même manière pour toute combinaison de valeurs positives et négatives

donc l'alu va fondamentalement a + (-b) pour a - b , mais il n'a pas besoin d'une étape de négation distincte. Les designers utilisent une astuce intelligente pour que les additionneurs font à la fois ajouter et sous dans la même longueur de cycle en ajoutant uniquement un Muxer et une porte non avec la nouvelle entrée binvert afin d'inverser conditionnellement la deuxième entrée. Voici un exemple alu simple qui peut faire et / ou / ajouter / sous

additionneur

Architecture de l'ordinateur - Adoutant complet

L'additionneur réel n'est qu'une boîte avec le signe plus à l'intérieur ⊞ qui ajoute a avec B ou ~ b et Dans , produisant la somme et effectue . Cela fonctionne en réalisant que dans le complément de deux -b = ~ b + 1 , donc a - b = A + ~ b + 1 . Cela signifie que nous devons simplement définir le porter dans à 1 (ou nier la prise de main pour emprunter dans) et inverser la deuxième entrée (c.-à-d. b ). Ce type d'alu peut être trouvé dans divers livres d'architecture informatique comme


1 commentaires

Not + Mux est en réalité une porte XOR, comme mentionné par en.wikipedia.org / wiki / additionneur% e2% 80% 93Subateur