Syntax: |
NEG Rd
|
Funktion: |
Dieser Befehl ersetzt den Wert eines Registers durch sein Zweierkomplement. Enthält
das Register den Wert 80h, so bleibt dieser unverändert.
|
Operation: |
Rd ← 00h - Rd
|
Operanden: |
0 ≤ d ≤ 31
|
Programmzähler: |
PC ← PC + 1
|
Words: |
1 (2 Byte)
|
Zyklen: |
1
|
16 Bit Operations Code: |
1001 010d dddd 0001
|
Flags im Status-Register (SREG):
H: |
Das H-Flag wird gesetzt, wenn bei der Subtraktion ein Übertrag von Bit 3 nach Bit
4 erfolgte, andernfalls wird das S-Flag gelöscht.
|
S: |
Das S-Flag wird gesetzt, wenn entweder das V-Flag oder das N-Flag gesetzt ist.
Wenn beide Bits gleich sind, wird das S-Flag gelöscht.
|
V: |
Das V-Flag wird gesetzt, wenn aus der Operation ein Zweierkomplement-
Überlauf erfolgt, andernfalls wird das Flag gelöscht. Ein Zweierkomplement-
Überlauf kann nur auftreten, wenn Rd vor der Operation den Wert 80h hatte.
|
N: |
Das N-Flag wird gesetzt, wenn das MSB des Ergebnisses gesetzt ist, andernfalls
wird es gelöscht.
|
Z: |
Das Z-Flag wird gesetzt, wenn das Ergebnis 00h ist, andernfalls wird das Flag
gelöscht.
|
C: |
Das C-Flag wird gesetzt, wenn bei der Subtraktion ein Übertrag von Null erfolgte,
andernfalls wird das Flag gelöscht. Das C-Flag wird in allen Fällen gesetzt, außer
wenn das Ergebnis nach der Operation 00h ist.
|
Beispiel:
sub r3,r0 ;R0 von R3 subtrahieren
brpl plus ;Springen, wenn das Ergebnis positiv ist.
neg r3 ;Zweierkomplement von R3 bilden
plus:
nop ;Weiter, Leerbefehl
Syntax: |
NOP
|
Funktion: |
Dieser Befehl führt keine Operation aus, es handelt sich um einen Leerbefehl, der einen
Taktzyklus lang dauert.
|
Operation: |
keine
|
Operanden: |
keine
|
Programmzähler: |
PC ← PC + 1
|
Words: |
1 (2 Byte)
|
Zyklen: |
1
|
16 Bit Operations Code: |
0000 0000 0000 0000
|
Flags im Status-Register (SREG):
Beispiel:
clr r3 ;Alle Bits in R3 löschen
ser r4 ;Alle Bits in R4 setzen
out $18,r3 ;R3 an Port B ausgeben (alle Bits auf 0)
nop ;Warten, Leerbefehl
out $18,r4 ;R4 an Port B ausgeben (alle Bits auf 1)