Arithmetik
Vorweg:
Die ALU ist nur 8-Bit breit, somit können arithmetische Operationen nur auf
das Low-Bytes eines Registers ausgeführt werden. Ein evtl. Carry bzw. Borrow
wird aber ins High-Byte weitergereicht.
Addition/Subtraktion
- ADD Rx, Ry
Addiert das Low-Byte von Ry zum Low-Byte von Rx. Wenn ein Übertrag stattfindet,
wird das High-Byte von Rx um 1 erhöht.
Wird das High-Byte vor der Addition auf 0 gesetzt, kann anschließend
überprüft werden, ob ein Überlauf auftrat.
- SUB Rx, Ry
Subtrahiert das Low-Byte von Ry vom Low-Byte von Rx. Wenn ein Borrow stattfindet,
wird das High-Byte von Rx um 1 erniedrigt.
- ADDH Rx, Ry (ADDS1 Rx, Ry)
Das Low-Byte von Ry wird zum High-Byte von Rx addiert und das Ergebnis im Low-Byte
von Rx abgelegt. Trat dabei ein Übertrag auf, wird das High-Byte von Rx auf $01 gesetzt,
sonst auf $00.
Mit diesem Befehl ist es z.B. möglich, bei einer Reihe aufeinanderfolgender
Additionen die Überträge in die Berechnung miteinzubeziehen.
- ADDH2 Rx, Ry (ADDS2 Rx, Ry)
Wie ADDH, jedoch wird bei einem Übertrag das High-Byte auf $00, sonst auf $FF gesetzt.
Damit kann ein Borrow ins High-Byte bei einer vorhergehenden Subtraktion (analog wie
ADDH bei der Addition) berücksichtigt werden.
- ADD Rx, #i (ADDI Rx, DATA)
Der 8-Bit Immediate-Wert i (bzw. DATA+1) wird zu Rx addiert.
- SUB Rx, #i (SUBI Rx, DATA)
Der 8-Bit Immediate-Wert i (bzw. DATA+1) wird von Rx subtrahiert.
Logische Operationen
- AND Rx, Ry
Logisches UND
- OR Rx, Ry (ORB Rx, Ry)
Logisches ODER
- XOR Rx, Ry
Logisches Exklusiv-ODER
Bitmanipulation
- SET Rx, #%xxxxxxxx (SETI Rx, MASK)
Setzt die durch x angegebenen Bits in Rx; im Prinzip also eine ODER-Operation
- CLR Rx, #%xxxxxxxx (CLRI Rx, MASK)
Löscht die durch x angegebeben Bits in Rx
Sonstiges
- SHR Rx (SHFTR Ry, 1)
Schiebt Rx um 1 Bit nach rechts, das höchstwertige Bit des Low-Bytes erhält
das niederwertigste Bit des High-Byte. Das High-Byte bleibt unverändert!
- ROR Rx (ROTR Ry, D)
Rotiert Rx um 1 Bit nach rechts; das herausfallende Bit wird zum höchstwertigen
Bit des Low-Bytes. Das High-Byte bleibt unverändert!
- ROR3 Rx (ROTR Ry, E)
Rotiert Rx um 3 Bits nach rechts; das herausfallende Bit wird zum niederwertigsten
Bit des Low-Bytes. Das High-Byte bleibt unverändert!
- SWAP Rx (ROTR Ry, F)
Vertauscht die zwei Nibbles (jeweil 4 Bit) des Low-Bytes. Das High-Byte
bleibt unverändert!
Eigentlich handelt es sich um ein Rotieren um 4 Bits nach rechts.