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!
Gast
#4624538
Hier ist der NEG-Befehl erklärt: http://www.atmel.com/webdoc/avrassembler/avrassembler.wb_NEG.html
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.
ou das erklärt einiges, vielen lieben Dank! :)
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.