Vorzeichenlose Binärzahlen Carry, Overflow...?
Kann mir bitte jemand bei der b) weiterhelfen?
Subtrahiert man x - y. Wann wird hier ein Carry gesetzt, wann ein Overflow-Flag?
Kann mir jemand die Tabelle bitte richtig ausfüllen. Danke!
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.
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.)
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?
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 ;-)
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?