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 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 Je veux faire A + B code> Ajout? P>
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>
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
5 Réponses :
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: Le compilateur lors de la compilation à Binary le fera: p> maintenant quand il veut ajouter 5, le ALU obtient 2 numéros et les ajoute, une addition simple. P> 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). P> 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). P> p>
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 A> ou Signé-Magntitude Représentations. P>
afin de trouver a-b code>, nous pouvons simplement nier b et ajouter; c'est-à-dire que nous trouvons
a + (-b) code>, et parce que nous utilisons 2's-complément, nous ne nous inquiétons pas si
(- b) code> est positif ou négatif , parce que l'ajout-algorithme fonctionne de la même manière. p>
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) code> addition. Cette possibilité de mise en œuvre ne change pas le fait que
(- 1) - (-2) - (-2) code> (i.e.
0xff - 0xfe code>) donne cf = 0. Le bras est le contraire: après la soustraction, le drapeau C est un
! Emprunter code> résultat, et l'instruction
SBC code> se comporte en conséquence.
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> 01 1
0101
+0101
=====
1010
ino-complément notation: AT-B = A + (non B) + 1 qui peut être effectué avec: p> 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. p> Par exemple, si vous commencez par le numéro 0 dans un registre et effectuez: P> pas, neg, pas, neg, pas, neg, ... em> le registre aura des valeurs: P> -1, 1, -2, 2, -3, 3, ... p>
blockQuote> ou comme autre 2 formules: p> pas b = -b -1 code> ou
-b = (non b) + 1 code>. Il peut être vérifié sur un ordinateur ou sur papier.
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 p> blockQuote>
Non, dans son complément de deux et deux, il y a aucune différenciation entre ajouter / soustraire un nombre positif ou négatif fort>. L'alu fonctionne de la même manière pour toute combinaison de valeurs positives et négatives p>
donc l'alu va fondamentalement
a + (-b) code> pour
a - b code>, 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 code> et
sous code> dans la même longueur de cycle forte> en ajoutant uniquement un Muxer et une porte non avec la nouvelle entrée binvert em> afin d'inverser conditionnellement la deuxième entrée. Voici un exemple alu simple qui peut faire et / ou / ajouter / sous p>
Architecture de l'ordinateur - Adoutant complet P>
L'additionneur réel n'est qu'une boîte avec le signe plus à l'intérieur ⊞ qui ajoute a em> avec B em> ou ~ b em> et Dans EM>, produisant la somme em> et effectue em>. Cela fonctionne en réalisant que dans le complément de deux
-b = ~ b + 1 code>, donc
a - b = A + ~ b + 1 code>. Cela signifie que nous devons simplement définir le porter dans em> à 1 (ou nier la prise de main pour emprunter dans) et inverser la deuxième entrée em> (c.-à-d. b em >). Ce type d'alu peut être trouvé dans divers livres d'architecture informatique comme p>
- Architecture design numérique et informatique li>
- Organisation informatique et conception MIPS Edition: l'interface matérielle / logicielle li>
- Organisation informatique et conception RISC-V Edition: l'interface logicielle matérielle li> ul>
dans son complément
-b = ~ b code> de sorte que vous ne définissez pas le porter dans em> lorsque vous souhaitez soustraire, sinon la conception est la même. Cependant, le complément de deux personnes a un autre avantage: les opérations sur des valeurs signées et non signées fonctionnent également de même, de sorte que vous n'avez même pas besoin de distinguer les types signés et non signés. Pour son complément, vous aurez besoin de Ajoutez le bit de report du bit le moins significatif Si le type est signé p>
avec une simple modification simple à l'alu ci-dessus, ils peuvent désormais faire 6 opérations différentes: Ajouter, SUB, SLT et ou, ni, ni p>
CSE 675.02: Introduction à l'ordinateur Architecture P>
Les opérations multiples bits sont effectuées en concatéant plusieurs aluses monopitaux ci-dessus. En réalité, Alus sont capables de faire beaucoup plus d'opérations, mais ils sont faits pour économiser de la place avec le principe similaire P>
Not + Mux est en réalité une porte XOR, comme mentionné par en.wikipedia.org / wiki / additionneur% e2% 80% 93Subateur
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.