Vorzeichenlose Binärzahlen Carry, Overflow...?

1 Antwort

Wir berechneten x - y (vorzeichenlos)

Z = 1 bedeutet, dass x = y war.

Z = 0 bedeutet, dass x != y war

C = 1 bedeutet, dass x < y war. Dabei ist immer Z = 0. (3. und 4. Zeile)

C = 0 bedeutet, dass x >= y war. Im Falle x = y wird zusätzlich Z gesetzt. (5. und 6. Zeile)

Da hier vier Statusregister gefragt waren:

Ich kenne das Overflow-Flag (V). Das wird gesetzt, wenn das in die oberste Volladdier-Stufe einlaufende Carry vom auslaufenden Carry (was dann im C-Flag landet) verschieden war. Das zeigt einem Überlauf für vorzeichenbehaftete Zweierkomplement-Zahlen an.

Das Vorzeichen-Flag (S) ist eine Kopie des oberwertigen Bits des Ergebnisses. Für vorzeichenbehaftete Zahlen ist das Ergebnis negativ, wenn S gesetzt ist.

Das Paritäts-Flag (P) zeigt an, dass die Anzahl der 1-Bits im Ergebnis gerade ist. (oder ungerade, je nach Prozessortyp).

Das Half-Byte-Carry (H) ist der Überlauf von der Volladierer-Stufe 2^3 in die 2^4. Es wird heutzutage sehr selten (für BCD-Rechnung) gebraucht.

RedDevil1982 
Fragesteller
 07.06.2023, 21:01

C = 1 bedeutet, dass x < y war. Dabei ist immer Z = 0. (3. und 4. Zeile)

In der 3 Anweisung ist Z = 0 und C = 1 d. h. es muss zu einem Übertrag bzw. Überlauf gekommen sein, da ich subtrahiere somit muss x < y sein.

In der 4 Anweisung steht nur C = 1, somit kann x <=y nicht richtig sein, da wenn

x =y ist käme ja C = 0 und Z = 1 heraus. Somit muss x < y sein. Komisch, dass in der Aufgabe dann x <= Z gar nicht verwendet wird?

Was käme überhaupt heraus, wenn ich bei vorzeichenlosen 4-Bit Zahlen

5 - 8 rechne?

0
tunik123  08.06.2023, 08:26
@RedDevil1982

Bei 5 - 8 kommt (bei 4 Bit) 13 raus. Normalerweise wird das C-Flag gesetzt.

(Ich habe auch schon einen Prozessor erlebt, der in einem solchen Fall das C-Flag nicht setzt. Da kommt man als Programmierer echt ins Grübeln.)

0
RedDevil1982 
Fragesteller
 08.06.2023, 09:02
@tunik123

Bei vorzeichenlosen Dualzahlen wenn das C-Flag gesetzt wird für Carry, dann liegt auch immer ein Overflow vor, oder?

4-Bit Dualzahlen vorzeichenlos

8 + 9 > 15 Carry wird gesetzt und Overflow

8-9 < 0 Carry wird gesetzt und Overflow?

0
tunik123  08.06.2023, 09:17
@RedDevil1982

Bei 8 + 9 ist C und V gesetzt.

Bei 8 - 9 ist C gesetzt. Bei V bin ich mir nicht sicher. Meiner Meinung nach ist V = 0, aber ich würde keine nennenswerten Geldbeträge darauf verwetten ;-)

0