Probleme mit dem Carry Flag bei der Subtraktion

#3833095
Lesenswert?

Hey Leute,

Ich arbeite mich gerade mithilfe eines Skriptes (von meinem Prof) sowie 
eines Buches (Mikroprozessortechnik von Klaus Wüst) in die 
Mikroprozessortechnik ein.

Jedoch sind beim Lösen der Aufgaben, aus dem Buch, einige Fragen 
aufgekommen.

Fragestellung aus dem Buch:
Welche Flags (Carry oder Overflow) werden bei 8-Bit Verarbeitung 
gesetzt, wenn folgende Rechnungen durchgeführt werden.

a) 90d + 200d (Addition)
b) 90d + 40d (Addition)
c) 90d - 110d (Subtraktion)
d) -90d - 60d (Subtraktion)

Das Overflow Flag zu bestimmen, machte mir mit folgendem Hilfsatz (Aus 
dem Skript von meinem Prof) keinerlei Probleme.

Hilfsatz:
Bei 8-Bit Operationen wird das Overflow Flag gesetzt, wenn:
- Ein Übertrag von Bit 6 nacht Bit 7 und kein Übertrag ins Bit 8
- Ein Übertrag nach Bit 8 und kein Übertrag von Bit 6 nach Bit 7 
stattfindet

Meine Lösung:
a) Overflow = 0
b) Overflow = 1
c) Overflow = 0
d) Overflow = 1

Nun zum Carry Flag:
Bei der Addition habe ich ebenfalls keine Probleme, denn im Buch steht:
Das Carry Flag zeigt bei der Addition einen Übertrag aus dem MSB heraus 
auf das (nicht mehr vorhandene) nächst höherwertige Bit an.

a) Carry = 1
b) Carry = 0

Nun zu meinem Problem bei der Subtraktion:
Im Buch steht:
Bei der Subtraktion zeigt es einen Borgen (Ich konnte nirgends 
herausfinden, was ein Borgen ist) von dem nächst höherwertigen Bit auf 
das MSB an. Dies wird beim Umgang mit vorzeichenlosen Zahlen ausgenutzt.

c) Keine Ahnung
d) Ebenfalls keine Ahnung

Jetzt habe ich gelesen, dass bei einer Subtraktion a-b auch ein
Carry-Flag gesetzt wird - und zwar dann, wenn der Subtrahend größer als
der Minuend ist (also b>a).

Wenn das stimmt, würde dies die Aufgabe c) lösen, aber ich wäre immer 
noch bei der d) Planlos.

Was ich mich ebenfalls Frage, ob der Wertebereich etwas mit dem Carry 
bzw. Overflow Flag zu tun hat?
Positiven Zahlen: 0…255
Negative Zahlen: -128…+127

Ich hoffe ihr könnt mir helfen und mir sagen ob ich ansonsten mit meinem 
Vorgehen richtig bin.

Grüße Brian!
#3833167
Lesenswert?

Und genau dann, wird das Carry Flag gesetzt?

Ü=Übertrag
c)

  90 01011010
-110 10010010
______________
Ü    00100100
______________
 -20 11101100

Warum wird hier das Carry Flag gesetzt?

d)

-90   10100110
-60   11000100
_______________
Ü    100001000
_______________
-150 101101010

Warum wird hier das Carry Flag NICHT gesetzt?

Danke für eure Hilfe.

Grüße Brian
Moderator #3833217
Lesenswert?

Bei den meisten Prozessoren kannst du folgendermaßen vorgehen:

Betrachte bei der Subtraktion a-b die Operanden a und b als
vozeichenlose Zahlen. Ist dann b>a, wird das Carry-Flag gesetzt, sonst
nicht.

Bei 90-110 ist a=90, b=110 und damit b>a und C=1.

Bei -90-60 ist a negativ. Bei 8-Bit-Zweierkomplementdarstellung
entspricht -90 der vorzeichenlosen Zahl 256-90=166. Also ist a=166, b=60
und damit b≤a und C=0.

Aber Vorsicht: Bei einigen Prozessoren (bspw. dem 6502 und m.W. auch bei
den PICs) wird das Carry-Flag bei der Subtraktion genau andersherum
gesetzt als bspw. beim AVR, nämlich bei b≤a, d.h. wenn kein Borgen
erforderlich ist.
#3833260
Lesenswert?

Yalu X. schrieb:
> Aber Vorsicht: Bei einigen Prozessoren (bspw. dem 6502 und m.W. auch bei
> den PICs) wird das Carry-Flag bei der Subtraktion genau andersherum
> gesetzt

Die Logik dahinter: Genau das kommt raus, wenn man nicht wirklich 
subtrahiert, sondern ohne zusätzliche Massnahmen einfach nur das 
Komplement addiert.

"Borgen" ist eine grausame Übersetzung von "borrow", wie der Übertrag 
bei einer Subtraktion in Englisch öfter mal genannt wird. 
Grammatikalisch korrekt wäre wohl "Geborgtes", aber das versteht auch 
niemand.

Die Unterscheidung hat aber einen tieferen Sinn: Wenn im Kontext einer 
Subtraktion von einem "borrow" gesprochen wird, dann ist eindeutig die 
echte Subtraktion gemeint, nicht die Addition des Komplements. Der 
Umkehrschluss funktioniert leider nicht, d.h. der Begriff "carry" wird 
für beide Varianten verwendet.

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