ADC Befehl in ASM 8086
Wenn ich ADC
zum Beispiel:
AL = 01 and BL = 02, and CF = 1
wenn ich dieses:
ADC AL,BL
Wird AL
werden 3
oder 4
? (mit der CF
Zusatz oder ohne?)
- Versuchen Sie und erhalten Sie in die Gewohnheit der Prüfung dieser Dinge für sich selbst - es ist ein guter Weg, um zu lernen.
- +1 Paul R. Tal, lernen Sie viel schneller und viel genauere Ergebnisse, wenn Sie testen, wie die Dinge auf Ihrem eigenen. In der Zeit, die es dauerte, Sie zu betreten, diese Frage zu klären, Dinge, die in den verschiedenen Antworten unten könnten Sie getestet haben und jedes Szenario und hatte eine definitive Antwort, während das lernen einige grundlegende Dinge über CPUs, die Register und flags.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Paar Dinge über die
8086
ADC
Anleitung:Klar die Aktion sagt das Carry-Flag (
CF
) wird in die Ergänzung, so wird das Ergebnis4
nicht3
.Es ist nicht anders, als die Zugabe in der Basis 10.
Das Ergebnis der oben dezimal-Mathematik 10 mit einem übertrag von 1, - oder 110, wenn Sie wollen, zu denken, dass es der Weg.
Für binäre beginnen Sie mit einem one-bit adder ist, hier eine Wahrheitstabelle:
in der linken Spalte drei bits der Eingabe-Kombinationen, zwei Operanden und des carry-in,
die zweite Spalte ist die Durchführung und die Dritte Spalte ist das Ergebnis
also 1+1 mit keine carry 110 in der linken Spalte und das Ergebnis 0 ist carry die 1.
Nicht anders als die dezimal math oben nur viel einfacher, wenn Sie eine Spalte als Dezimalzahl operand a operand b, zu tragen. Das Ergebnis ist die Antwort modulo 10 und der carry ist das Ergebnis/10. kopieren Sie die tragen Sie auf den Anfang der nächsten Spalte, und wiederholen Sie für immer. wie gezeigt, mit 99+11 oder 999+111, usw.
Für die einfacheren zwei-bit-add ohne carry das Ergebnis der xor-Verknüpfung der inputs und der Durchführung ist und die beiden Eingänge. Könnte man implementieren add with carry mit zwei hinzufügen, ohne carry-Addierer angekettet oder tun Sie es direkt. Das Ergebnis wird gesetzt, wenn eine ungerade Anzahl von onces oder ungerade Parität, die zu zwei xors r = a xor b xor tragen. Die Durchführung bin ich mit zu kämpfen im moment, vielleicht kann jemand helfen.
also eine 8 bit 0xFF + 0xFF mit carry set geben wird
Dies zeigt 0xff + 0xff mit einem "carry the one" kommen, bevor Sie beginnen.
betrachten es jeweils eine Spalte aus der rechten Seite, gleich wie decimal Mathematik
diese weiterhin besteht und Sie am Ende mit
0xFF, mit dem carry-bit gesetzt
Also, wenn Sie hatte nur einen 8-bit-add mit carry-man könnte hinzufügen, bis die zwei zahlen so breit, wie Sie Speicher.
Lässt Blick auf eine 16-bit add:
Könnte man nur die Mathematik mit einem 16-bit-add, 0xBE01.
wird, oder mit einem 8-bit adder:
also die Antwort ist 0xBE01
Oder mit einem 4-bit-Addierer, wenn alle Sie haben, ist ein 4-bit-alu
wieder das Ergebnis 0xBE01 carry bit löschen
konnten wir dies mit den einzelnen bit-als auch einer 3-bit-Addierer, so lange, wie es Binär ist es trivial.
Alle nützlichen Prozessoren müssen einige Weg, um das carry-bit, so dass Sie können erweitern die alu. Manchmal gibt es separate add und adc, einige der adc ist ein zusätzlicher Schritt, der oder die am meisten schmerzhaft ist, wäre eine Beurteilung ohne tragen und verwenden Sie einen Zweig, wenn sich klare mit einem add immediate unter ihm.
Dies ist auch der Grund, warum verschiebt oder rotiert, rotieren durch das carry-bit, so können Sie eine bit-Verschiebung breiter als die Breite eines Registers/Speicher.
binäre Multiplikation ist schmerzhaft einfach, im Vergleich zu dezimal, aber ich erspare Ihnen das und lass Sie darüber nachdenken.
Ja, Sie haben könnte und haben sollte ein Programm geschrieben, um zu versuchen, dieses heraus. Und immer noch kann, ich könnte absichtlich führt Sie auf einen Weg der Desinformation.
AL
4.ADC
bedeutetadd with carry
, so wird natürlich das tragen ist zusammenfassen.CF
wird wieder auf 0 gesetzt, da es keine carry aus der addition in Frage stellen.1FF
im AX und wieder auf der CF auf 0.Ist es 4. ADC (add with carry) addiert in einem extra-1, wenn das carry-flag (CF) ist 1. Siehe die vollständige Beschreibung des opcode hier.