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:
Mnemonic
Funktion
Bytes
MZ
Flags
ADD A, Rr
Der Akkumulator wird überschrieben durch das Ergebnis der Addition von Akku und dem Inhalt von Rr.
1
1
CY, AC, OV, P
ADD A, dadr
Der Akkumulator wird Überschrieben durch das Ergebis der Addition von Akku und dem Inhalt von dadr.
2
1
CY,AC, OV,P
ADD A, @Ri
Der Akkumulator wird Überschrieben durch das Ergebis der Addition von Akku und dem Inhalt der internen Datenspeicherzelle, die durch Ri adressiert wird.
1
1
CY,AC, OV,P
ADD A, #const8
Der Akkumulator wird Überschrieben durch das Ergebis der Addition von Akku und dem Inhalt der 8-Bit-Konstanten.
2
1
CY,AC, OV,P
ADDC A, Rr
Der Akkumulator wird überschrieben durch das Ergebnis der Addition von Akku, Rr und dem Inhalt des Carry-Flag.
1
1
CY,AC, OV,P
ADDC A, dadr
Der Akkumulator wird überschrieben durch das Ergebnis der Addition von Akku, dadr und dem Inhalt des Carry-Flag.
2
1
CY,AC, OV,P
ADDC A, @Ri
Der 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.
1
1
CY,AC, OV,P
ADDC A, #const8
Der Akkumulator wird überschrieben durch das Ergebnis der Addition von Akku, dem Inhalt der 8-Bit-Konstanten und dem Inhalt des Carry-Flag.
2
1
CY,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:
Mnemonic
Funktion
Bytes
MZ
Flags
SUBB A, Rr
Der Akkumulator wird überschrieben durch das Ergebnis der Subtraktion von Akku und der Summe der Inhalte von Rr und Carry-Flag.
1
1
CY,AC, OV,P
SUBB A, dadr
Der Akkumulator wird überschrieben durch das Ergebnis der Subtraktion von Akku und der Summe der Inhalte von dadr und Carry-Flag.
2
1
CY,AC, OV,P
SUBB A, @Ri
Der 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.
1
1
CY,AC, OV,P
SUBB A, #const8
Der Akkumulator wird überschrieben durch das Ergebnis der Subtraktion von Akku und der Summe der Inhalte von Carry-Flag und der 8-Bit-Konstanten.
2
1
CY,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:
Mnemonic
Funktion
Bytes
MZ
Flags
INC A
Zum Inhalt des Akkumulators wird inkrementiert.
1
1
P
INC Rr
Der Inhalt des Registers Rr wird inkrementiert.
1
1
-
INC dadr
Der Inhalt der Speicherzelle dadr wird inkrementiert.
2
1
-
INC @Ri
Der Inhalt der Speicherzellen des internen Datenspeichers, der durch Ri adressiert ist, wird inkrementiert.
1
1
-
INC DPTR
Der Inhalt des Datenpointers wird inkrementiert.
1
2
-
DEC A
Der Inhalt des Akkumulators wird dekrementiert
1
1
P
DEC Rr
Der Inhalt des Registers Rr wird dekrementiert.
1
1
-
DEC dadr
Der Inhalt der Speicherzelle dadr wird dekrementiert.
2
1
-
DEC @Ri
Der Inhalt der Speicherzelle des internen Datenspeichers, die durch Ri adressiert ist, wird dekrementiert.
1
1
-
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.