Auf einer 32-Bit-Maschine muss ein "Add-with-Carry" -Befehl, der als Teil einer Additionssequenz mit Mehrfachgenauigkeit verwendet wird, Operanden im Wert von 65 Bit akzeptieren und eine 33-Bit-Summe berechnen. Die Quellregisterspezifikationen geben an, woher 64 Operandenbits kommen sollen, und die Zielregisterspezifikation gibt an, wohin die unteren 32 Bits des Ergebnisses gehen sollen, aber was mit dem Operanden "add one extra" oder dem oberen Bit zu tun ist des ergebnisses? Als Teil des Befehls angeben zu dürfen, woher der zusätzliche Operand kommen soll und wohin das zusätzliche Ergebnisbit gehen soll, wäre mäßig nützlich, aber es wäre im Allgemeinen nicht so nützlich, ein zusätzliches Feld im Opcode zu rechtfertigen. Einen festen "Ort" für die Handhabung des Übertrags-Flags zu haben, kann aus Sicht der Befehlsplanung etwas umständlich sein, aber es ist
Wenn man versuchen würde, einen Befehlssatz zu entwerfen, der Arithmetik mit Mehrfachgenauigkeit ermöglicht, aber jeder Befehl auf zwei 32-Bit-Operanden und einen 32-Bit-Zieloperanden beschränkt ist, könnte man ein 64-Bit-Add in vier Befehlen implementieren: set r5 auf 1, wenn r0 + r2 andernfalls den Wert 0 haben würde; berechne r4 = r1 + r3; berechne r5 = r4 + r5; berechne r4 = r0 + r2 ", aber darüber hinaus würde es drei Anweisungen für jedes zusätzliche Wort erfordern. Durch die Verfügbarkeit eines Carry-Flags als zusätzliche Quelle und Ziel werden die Kosten auf einen Befehl pro Wort reduziert.
Man beachte übrigens, dass eine Befehlsbitsteuerung, ob der Befehl das Flagregister aktualisiert, eine Ausführung außerhalb der Reihenfolge erleichtern kann, da Befehle, die die Flagbits verwenden oder modifizieren, ihre Reihenfolge relativ zueinander beibehalten müssen, Befehle, die dies jedoch nicht tun frei angeordnet werden. Angesichts der Reihenfolge:
ldr r0,[r1]
add r0,r0,r2
eors r4,r5,r6
Eine Ausführungseinheit könnte ziemlich leicht erkennen, dass der dritte Befehl ausgeführt werden könnte, ohne darauf warten zu müssen, dass Daten gelesen werden [r1]
, aber wenn der zweite Befehl ausgeführt worden wäre adds r0,r0,r2
, wäre dies nur möglich, wenn die Ausführungseinheit sicherstellen könnte, dass zu dem Zeitpunkt etwas versucht wird, dies zu verwenden Bei den Flags würde das Null-Flag den in der dritten Anweisung festgelegten Wert enthalten, während das Übertrags-Flag den Wert in der zweiten Anweisung enthält.