AL
wird 4. ADC
bedeutet add with carry
, also wird natürlich der Übertrag summiert. CF
wird wieder auf 0 gesetzt, da kein Übertrag ausgeführt wird der Zusatz in Frage.
Es wird 4. ADC (add with carry) fügt eine zusätzliche 1 hinzu, wenn das Übertrags-Flag (CF) 1 ist. Siehe die vollständige Beschreibung des Opcodes hier .
Es ist nicht anders als das Hinzufügen in Basis 10.
%Vor%Das Ergebnis der obigen Dezimalmathematik ist 10 mit einem Übertrag von 1, oder 110, wenn Sie so darüber nachdenken möchten.
Für den binären Start mit einem Ein-Bit-Addierer ist hier eine Wahrheitstabelle:
%Vor%die linke Spalte von drei Bits sind die Eingabekombinationen, zwei Operanden und Carry-In, die zweite Spalte wird ausgeführt und die dritte Spalte ist das Ergebnis
also 1 + 1 ohne Übertrag ist 110 in der linken Spalte und das Ergebnis ist 0 trage die 1.
Nicht anders als die dezimale Mathematik oben einfach viel einfacher, wenn Sie eine Spalte in Dezimal, Operand a, Operand b, tragen. Das Ergebnis ist die Antwort modulo 10 und der Übertrag ist das Ergebnis / 10. Kopiere den Übertrag zum Anfang der nächsten Spalte und wiederhole für immer. wie mit 99 + 11 oder 999 + 111 usw. demonstriert.
Für das einfachere Addieren von zwei Bits ohne Übertrag ist das Ergebnis der xor der Eingänge und der Übertrag der und der zwei Eingänge. Sie könnten hinzufügen mit tragen mit zwei Add ohne Carry-Addierer verkettet oder es direkt tun. Das Ergebnis wird gesetzt, wenn eine ungerade Anzahl von Onces oder Odd Parity vorhanden ist, was zwei Xor r = a xor oder b xor carry in ist. Mit dem Ausführen, mit dem ich gerade kämpfe, kann vielleicht jemand helfen.
also ein 8-Bit-0xFF + 0xFF mit Carry-Set wird
geben %Vor%Dies zeigt 0xff + 0xff mit einem "carry the one", bevor Sie anfangen.
Betrachte es von rechts nach rechts, genau wie bei dezimaler Mathematik
%Vor%Das geht weiter und Sie enden damit 0xFF mit dem Übertragsbit gesetzt
Wenn Sie also nur eine 8-Bit-Addition mit Übertrag haben, können Sie zwei Zahlen addieren, die so groß sind wie Ihr Speicher.
Sehen wir uns eine 16-Bit-Erweiterung an:
%Vor%Sie könnten einfach mit einem 16-Bit-Add, 0xBE01, rechnen.
oder mit einem 8-Bit-Addierer:
%Vor%so lautet die Antwort 0xBE01
Oder mit einem 4-Bit-Addierer, wenn alles, was Sie haben, ist ein 4-Bit-Alu
%Vor%nochmal das Ergebnis 0xBE01 carry bit clear
wir könnten dies auch mit einzelnen Bits oder einem 3-Bit-Addierer tun, solange es binär ist, ist es trivial.
Alle nützlichen Prozessoren müssen eine Möglichkeit haben, das Übertragsbit hinzuzufügen, damit Sie das Alu erweitern können. Manchmal gibt es separate add und adc, einige der adc ist ein zusätzlicher Schritt oder die schmerzhafteste wäre eine add ohne tragen und verwenden Sie eine Verzweigung, wenn mit einem fügen Sie sofort unter ihm klar.
Dies ist auch der Grund, warum sich Verschiebungen oder Drehungen durch das Übertragsbit drehen, so dass Sie eine Bitverschiebung durchführen können, die breiter ist als die Breite eines Registers / Speicherplatzes.
binäre Multiplikation ist schmerzlich einfach im Vergleich zu dezimalen, aber ich werde dich ersparen und lassen Sie darüber nachdenken.
Ja, Sie könnten und hätten ein Programm schreiben sollen, um das auszuprobieren. Und immer noch kann ich dich absichtlich auf einen Weg der Fehlinformation führen.
Tags und Links assembly x86-16 machine-instruction