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

#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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren