ADC-Befehl in ASM 8086

8

Wenn ich zum Beispiel ADC verwende:

%Vor%

wenn ich das mache:

%Vor%

Wird AL be 3 oder 4 ? (mit dem Zusatz CF oder ohne?)

    
Tal 22.04.2010, 04:30
quelle

4 Antworten

9

Wenige Dinge über die Anweisung 8086 ADC :

%Vor%

Offensichtlich sagt die Aktion, dass das Carry-Flag ( CF ) in die Addition eingeschlossen wird, so dass das Ergebnis 4 nicht 3 ist.

    
codaddict 22.04.2010 04:35
quelle
3

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.

    
Alex Martelli 22.04.2010 04:34
quelle
3

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 .

    
Adam Rosenfield 22.04.2010 04:34
quelle
3

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.

    
old_timer 22.04.2010 18:49
quelle