Forum: Mikrocontroller und Digitale Elektronik Carry-Flag beim Negieren


von Florian S. (sirius7)


Lesenswert?

Hallo,

wollte gerade Befehl Neg mit Simulator testen und habe als Probe 
folgendes eingetippt

start:
ldi r26,0x02
out PORTB, r26
neg r26
out PORTB, r26

habe, wie erwartet als Ergebnis 0xfe erhalten aber bei Flags waren S,N 
und C alle 1 gesetzt. Wegen S und N ist klar, doch warum C=1?

es hat doch kein Überlauf statt gefunden?

00000010 //0x02
11111101 //1K
00000001 //+1
_______
11111110 //2K kein Überlauf

kann mich jemand aufklären?

danke!

von Luger (Gast)


Lesenswert?


von (prx) A. K. (prx)


Lesenswert?

Es gibt zwei komplementäre Konventionen für die Subtraktion:
(1) Addition des Einerkomplements, 0-1 gibt C=0, 0-0 gibt C=1
(2) Echtes Borrow, 0-1 gibt C=1 als Borrow.

Bei (2) endet jede Negation, also 0 minus X, mit Borrow, also C=1, 
ausser bei 0.

von Florian S. (sirius7)


Lesenswert?

ou das erklärt einiges, vielen lieben Dank! :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.