Subtraktion Binärzahlen?

2 Antworten

Alle mir bekannten Prozessoren (bis auf eine einzige Ausnahme, aber das war wirklich ein Exot) invertieren bei der Subtraktion das C-Flag, so dass es bei beiden Aufgaben 0 wird.

V wird gesetzt, wenn das Carry der höchsten Addiererstufe vom Carry der zweithöchsten Addiererstufe abweicht. Das ist bei der ersten Aufgabe tatsächlich der Fall.

N ist die Kopie des höchstwertigen Bits des Ergebnisses. Das ist in beiden Fällen 0.

Dass Z = 0 wird, ist offensichtlich.


RedDevil1982 
Fragesteller
 21.06.2023, 11:28

"V wird gesetzt, wenn das Carry der höchsten Addiererstufe vom Carry der zweithöchsten Addiererstufe abweicht. Das ist bei der ersten Aufgabe tatsächlich der Fall."
=> Verständlich. Danke!

"Alle mir bekannten Prozessoren (bis auf eine einzige Ausnahme, aber das war wirklich ein Exot) invertieren bei der Subtraktion das C-Flag, so dass es bei beiden Aufgaben 0 wird."

=> Ist jetzt hier das Carry-Flag bei a) und b) richtig gesetzt oder falsch?
Wenn an der MSB das Carry entsteht was hier bei a) und b) der Fall ist, so müsste es auch gesetzt werden. D.h. C = 1

0
tunik123  21.06.2023, 11:42
@RedDevil1982

Meiner Meinung nach muss C = 0 sein.

Die Subtraktion ist ja in beden Fällen ohne weiteres ausführbar.

In der Praxis baut man einen Subtrahierer so, dass man einen Addierer als Rechenwerk benutzt (den hat man ja normalerweise sowieso):

Man invertiert den Subtrahenden bitweise. Für das niederwertige Bit nimmt man einen Volladdierer, dem man als Carry-In eine 1 gibt (dadurch entsteht "nebenbei" das Zweierkomplement des Subtrahenden). Das Carry-Out des höchstwertigen Addierers wird invertiert in das C-Flag geschrieben. Das V-Flag ist die XOR-Verknüpfung des Carry-In und Carry-Out des höchtwertigen Addierers.

0
Sind die Ergebnisse hier korrekt?

Ja, es wurde alles richtig gerechnet.

Entsteht hier auch ein Overflow? V ist laut der Lösung gesetzt?

Die Differenzbildung erzeugt kein overflow. Aber die Zahl 166 liegt oberhalb des definierten Zahlenbereichs [-128 .. +127]. Dies könnte zum Overflow flag geführt haben schon bei der Eingabe.

Warum entsteht jetzt hier kein Overflow? V = 1?

Weil beide Operanden 110 und (-69) innerhalb des Definitionsbereichs [-128 .. +127] liegen.

Woher ich das weiß:Studium / Ausbildung

RedDevil1982 
Fragesteller
 21.06.2023, 09:06

In der Aufgabe werden vorzeichenlose Binärzahlen subtrahiert

0
RedDevil1982 
Fragesteller
 21.06.2023, 09:14

d.h. Def [0 ... +255]

0
ProfFrink  21.06.2023, 09:43
@RedDevil1982

Die Subtraktion wird auf eine Addition des 2er Komplementes zurückgeführt. Die Bildung des 2er Komplements verschiebt den abbildbaren Zahlenbereich von [0 .. +255] nach [-128 .. +127] . "Vorzeichenlos" bedeutet in diesem Zusammenhang ja nicht, dass es überhaupt keine Vorzeichen mehr gibt, sondern dass negative Zahlen auf eine ganz besondere Weise dargestellt werden. Eben als Zweierkomplent.

2 -> 0000 0010

1 -> 0000 0001

0 -> 0000 0000

-1 -> 1111 1111

-2 -> 1111 1110

-3 -> 1111 1101

Eine "vorzeichenbehaftete" (-3) müssten man dagegen mit "1000 0011" darstellen, wobei das MSB dann explizit das Vorzeichen darstellen würde.

0