Assembler Subtraktion 0x80-0x40: Warum hier Carry=1 und Overflow=1 ?

OP #5714495
Lesenswert?
• ▲
▼
Hi,

ich komm da nicht drauf... Das Carrybit C gibt ggf. doch den übrigen 
Übertrag an und das Overflowbit V ob das Ergebnis der Operation über 
oder unter die Grenzen des Wertebereichs geschlagen ist.

mov.b #0x80, r5
sub.b #0x40, r5

0x80-0x40=0x40
1
 1000 0000
2
-0100 0000
3
-1
4
-----------
5
 0100 0000

Das geht doch prima auf. Es bleibt weder Übertrag noch ist das Ergebnis 
kleiner als -FF oder größer als FF.

Trotzdem sind C und V im Statusregister nach der Operation beide 1. Ich 
verstehs nicht. Könnt ihr mir bitte kurz sagen was ich nicht weiß oder 
falsch verstanden habe?

Danke!
(Firma: Golden Delicious Computers) #5714506
Lesenswert?
• ▲
▼
Je nach Prozessorarchitektur ist der "Borrow" bei der Subtraktion 
negiert oder nicht. Manche Prozessoren machen auch erst eine Negation 
und addieren dann:

   0x80
+  0xc0  = "-0x40" (abgeschnitten)
=======
  0x140 => 0x40 plus "Carry" und "Overflow".
Moderator #5714546
Lesenswert?
• ▲
▼
Ja, das Carry-Flag wird beim MSP430 gesetzt, wenn kein Borgen
erforderlich ist.

Wie Axel geschrieben hat, wird das Overflow-Flag V wird gesetzt, wenn
bei Operationen mit vorzeichenbehafteten Zahlen ein Überlauf auftritt.
0x80 = -128 ist der kleinste in 8 Bit darstellbare Zahl. Wenn davon
etwas Positives (0x40 = +64) subtrahiert werden soll ist das Ergebnis
(-192) nicht mehr darstellbar, also wird das V-Flag gesetzt.
Gast #5714565
Lesenswert?
• ▲
▼
Nikolaus S. schrieb:
> Je nach Prozessorarchitektur ist der "Borrow" bei der Subtraktion
> negiert oder nicht. Manche Prozessoren machen auch erst eine Negation
> und addieren dann:
>
>    0x80
> +  0xc0  = "-0x40" (abgeschnitten)
> =======
>   0x140 => 0x40 plus "Carry" und "Overflow".

+1
Wenn die Seite ein Häkchen könnte, dann wäre das hier.

Erklärung u.a.
https://de.wikipedia.org/wiki/Zweierkomplement

Zitat aus der Seite:
Alternative Faustregel:

Invertiere alle Stellen
Addiere 1

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.