Impressum
< Datentransport Inhalt Logische Befehle>

Arithmetische Befehle

Addition (plus)
Subtraktion (minus)
Inkrement/Dekrement (+/-1)
Multiplikation (mal)
Division (geteilt)

Addition

Es gibt zwei Additionsbefehle add und addc. Der erste Parameter ist immer A, der zweite kann ein Register, eine direkte Adresse, eine Konstante oder eine über R0 oder R1 indirekt adressierte Speicherzelle sein.
Der add Befehl addiert den Akkumulator und den zweiten Parameter zusammen. Das Ergebnis wird in den Akku geschrieben.
Der addc Befehl addiert zusätzlich zu Akku und Parameter das Carry-Flag hinzu. Dieser Befehl ist sinnvoll, wenn Additionen von 16 oder mehr Bit Zahlen durchgeführt werden sollen.
Beide Additionsbefehle verändern das Carry (C) und Overflow (OV) Flag.
Werden vorzeichenlose Zahlen addiert und ist nach einer Addition C gesetzt, so trat ein Überlauf auf. Dies bedeutet, dass die Summe größer als 255 ist.
Werden hingegen vorzeichenbehaftete Zahlen addiert (Zahlen im 2er-Komplement), so zeigt das OV Flag an, dass ein Überlauf auftrat (also die Summe aus 2 positiven Zahlen eine negative ergab oder aus der Summe zweier negativen Zahlen eine positive wurde).

Hier die Additionsbefehle in der Übersicht:

MnemonicFunktionBytesMZFlags
ADD A, RrDer Akkumulator wird überschrieben durch das Ergebnis der Addition von Akku und dem Inhalt von Rr.11CY, AC, OV, P
ADD A, dadrDer Akkumulator wird Überschrieben durch das Ergebis der Addition von Akku und dem Inhalt von dadr.21CY,AC, OV,P
ADD A, @RiDer Akkumulator wird Überschrieben durch das Ergebis der Addition von Akku und dem Inhalt der internen Datenspeicherzelle, die durch Ri adressiert wird.11CY,AC, OV,P
ADD A, #const8Der Akkumulator wird Überschrieben durch das Ergebis der Addition von Akku und dem Inhalt der 8-Bit-Konstanten.21CY,AC, OV,P
ADDC A, RrDer Akkumulator wird überschrieben durch das Ergebnis der Addition von Akku, Rr und dem Inhalt des Carry-Flag.11CY,AC, OV,P
ADDC A, dadrDer Akkumulator wird überschrieben durch das Ergebnis der Addition von Akku, dadr und dem Inhalt des Carry-Flag.21CY,AC, OV,P
ADDC A, @RiDer Akkumulator wird überschrieben durch das Ergebnis der Addition von Akku, dem Inhalt der internen Datenspeicherzelle, die durch Ri adressiert wird und dem Inhalt des Carry-Flag.11CY,AC, OV,P
ADDC A, #const8Der Akkumulator wird überschrieben durch das Ergebnis der Addition von Akku, dem Inhalt der 8-Bit-Konstanten und dem Inhalt des Carry-Flag.21CY,AC, OV,P

You-Tube Video (Lauflicht mit addc)

Subtraktion

Bei der Subtraktion wird immer vom A abgezogen. Es wird A-Parameter-Carry berechnet, d.h. das Carry wird immer mit abgezogen (so wie es bei addc hinzuaddiert wird). Bei einer 8-Bit Subtraktion muss daher das Carry-Flag vorher gelöscht werden.
Eine Subtraktion verändern das Carry (C) und Overflow (OV) Flag.
Werden vorzeichenlose Zahlen subtrahiert und ist danach C gesetzt, so trat ein Überlauf auf. Dies bedeutet, dass A kleiner als der zweite Operand war.
Werden hingegen vorzeichenbehaftete Zahlen subtrahiert (Zahlen im 2er-Komplement), so zeigt das OV Flag an, ob ein Überlauf auftrat.

Hier die Subtraktionsbefehle in der Übersicht:

MnemonicFunktionBytesMZFlags
SUBB A, RrDer Akkumulator wird überschrieben durch das Ergebnis der Subtraktion von Akku und der Summe der Inhalte von Rr und Carry-Flag.11CY,AC, OV,P
SUBB A, dadrDer Akkumulator wird überschrieben durch das Ergebnis der Subtraktion von Akku und der Summe der Inhalte von dadr und Carry-Flag.21CY,AC, OV,P
SUBB A, @RiDer Akkumulator wird überschrieben durch das Ergebnis der Subtraktion von Akku und der Summe der Inhalte von Carry-Flag und dem Inhalt der internen Datenspeicherzelle, die durch Ri adressiert wird.11CY,AC, OV,P
SUBB A, #const8Der Akkumulator wird überschrieben durch das Ergebnis der Subtraktion von Akku und der Summe der Inhalte von Carry-Flag und der 8-Bit-Konstanten.21CY,AC, OV,P

Inkrement und Dekrement

Inkrement (inc) bedeutet, dass der Operand um eins erhöht wird und Dekrement (dec), dass er um eins vermindert wird.
Diese Befehle setzten jedoch weder das Carry, noch das Overflow Flag, wodurch sie für 16-Bit Operationen nicht verwendet werden können.

Hier die Inkrement und Dekrement Befehle in der Übersicht:

MnemonicFunktionBytesMZFlags
INC AZum Inhalt des Akkumulators wird inkrementiert.11P
INC RrDer Inhalt des Registers Rr wird inkrementiert.11-
INC dadrDer Inhalt der Speicherzelle dadr wird inkrementiert.21-
INC @RiDer Inhalt der Speicherzellen des internen Datenspeichers, der durch Ri adressiert ist, wird inkrementiert.11-
INC DPTRDer Inhalt des Datenpointers wird inkrementiert.12-
DEC ADer Inhalt des Akkumulators wird dekrementiert11P
DEC RrDer Inhalt des Registers Rr wird dekrementiert.11-
DEC dadrDer Inhalt der Speicherzelle dadr wird dekrementiert.21-
DEC @RiDer Inhalt der Speicherzelle des internen Datenspeichers, die durch Ri adressiert ist, wird dekrementiert.11-

Multiplikation

Der Multiplikationsbefehl mul AB berechnet das Produkt von A und B. Das Ergebnis wird in A und B gespeichert, wobei A das niederwertige Byte und B höherwertige Byte des Ergebnisses beinhaltet.

You-Tube Video (Lauflicht mit mul AB)

Division und Modulo

Der Befehl div AB teilt A durch B ganzzahlig.
Das Ergebnis der ganzzahligen Division steht in A und der Teilungsrest steht in B.