FB18 - Das Forum für Informatik

fb18.de / Bachelorstudieng / PM Technische Informatik

0x00000000 - 0xb2d05e00 = 0x4d2fa200

0x00000000 - 0xb2d05e00 = 0x4d2fa200 2008-02-12 18:46
Anonymer User
Welche Anzeigen setzt der Befehl subcc der Sparc V8 für die folgenden Subtraktionen?
dies wäre ein möglcihe klausuraufgabe.

kann deshalb nochmal jemand die folgende schreibweise erklären?

0x00000000 - 0xb2d05e00 = 0x4d2fa200

RE: 0x00000000 - 0xb2d05e00 = 0x4d2fa200 2008-02-12 18:59
Atomic
Erst lesen, dann posten.
Es war kein neuer Thread erforderlich.
http://www.fb18.de/mybb/showthread.php?tid=9364

RE: 0x00000000 - 0xb2d05e00 = 0x4d2fa200 2008-02-12 19:04
T
kann deshalb nochmal jemand die folgende schreibweise erklären?
0x00000000 - 0xb2d05e00 = 0x4d2fa200
das ist hexadezimal.
man hat also nicht zwei ziffern (wie im binären 0 und 1) oder zehn ziffern (wie im dezimalen 0-9) sondern sechzehn.
weil es aber nunmal nur zehn ziffern gibt, nimmt man einfach noch die buchstaben a bis f dazu.

das hexadezimalsystem ist sehr praktisch, weil jeweils vier stellen einer binärzahl genau einer hexadezimalen stelle entsprechen.

man kann also einfach so:
0x b 2 d 0 5 e 0 0 1011 0010 1101 0000 0101 1110 0000 0000 übersetzen. das ist ähnlich kompakt wie das dezimalsystem, aber viel weniger rumrechnerrei.

RE: 0x00000000 - 0xb2d05e00 = 0x4d2fa200 2008-02-12 19:50
Anonymer User
Welche Anzeigen setzt der Befehl subcc der Sparc V8 für die folgenden Subtraktionen?
dies wäre ein möglcihe klausuraufgabe.

0x00000000 - 0xb2d05e00 = 0x4d2fa200

um diese aufgabe zu lösen übersetzt man also 0x4d2fa200 in eine binärzahl und schaut welche flags gesetzt werden?

RE: 0x00000000 - 0xb2d05e00 = 0x4d2fa200 2008-02-12 20:18
T
um diese aufgabe zu lösen übersetzt man also 0x4d2fa200 in eine binärzahl und schaut welche flags gesetzt werden?
1. das würde nicht reichen, da man zb einen überlauf nicht nur am ergebnis erkennen kann
2. kann man auch gleich mit den hex-zahlen rechnen

RE: 0x00000000 - 0xb2d05e00 = 0x4d2fa200 2008-02-12 20:22
Anonymer User
um diese aufgabe zu lösen übersetzt man also 0x4d2fa200 in eine binärzahl und schaut welche flags gesetzt werden?
1. das würde nicht reichen, da man zb einen überlauf nicht nur am ergebnis erkennen kann
2. kann man auch gleich mit den hex-zahlen rechnen
und wie macht ihr das?

RE: 0x00000000 - 0xb2d05e00 = 0x4d2fa200 2008-02-12 20:31
T
und wie macht ihr das?
da had doch fred neulich was zu gemalt?
ja: hier

RE: 0x00000000 - 0xb2d05e00 = 0x4d2fa200 2008-02-12 20:45
Fred
2. kann man auch gleich mit den hex-zahlen rechnen
und wie macht ihr das?
Wie subtrahiert man schriftlich? Das sollte man irgendwann in der Grundschule gelernt haben. Jetzt musst Du das nur noch auf das Hexadezimalsystem übertragen. Du solltest am besten auswendig lernen, wie der Minusoperator auf Ziffern angewendet wirkt.

In der Grundschule gab's solche Rechentafeln. Das können wir ja auch mal machen. Anbei die ersten vier Zeilen, der Rest sei dem Leser als Übung überlassen. In der linken Spalte sieht man den Minuenden, in der oberen Zeile den Subtrahenden. Fette Zahlen markieren einen Übertrag.

_ 0 1 2 3 4 5 6 7 8 9 a b c d e f
0 0 f e d c b a 9 8 7 6 5 4 3 2 1
1 1 0 f e d c b a 9 8 7 6 5 4 3 2
2 2 1 0 f e d c b a 9 8 7 6 5 4 3
3 3 2 1 0 f e d c b a 9 8 7 6 5 4
4
5
6
7
8
9
a
b
c
d
e
f

Beispiel: 2-4 = e (mit Übertrag, weil man ja mehr abzieht, als man hat)

RE: 0x00000000 - 0xb2d05e00 = 0x4d2fa200 2008-02-12 20:46
Anonymer User
versteh ich nich, muss ich dann wohl drauf verzichten.

was bringt es einem denn wenn man die flags kennt wenn dann so eine aufgabe kommt mit der man nich klar kommt

RE: 0x00000000 - 0xb2d05e00 = 0x4d2fa200 2008-02-12 20:51
Fred
was bringt es einem denn wenn man die flags kennt wenn dann so eine aufgabe kommt mit der man nich klar kommt
Was meinst Du denn damit dass Du "die Flags kennst"? Die Flags werden ja entsprechend dem Ergebnis der letzten cc-Operation (addcc, subcc… äh, ich glaube das war's schon) gesetzt. Wenn Du nicht verstehst, wie die Flags gesetzt werden, inwiefern kennst Du die Flags denn dann überhaupt?

RE: 0x00000000 - 0xb2d05e00 = 0x4d2fa200 2008-02-12 21:22
Anonymer User
hab ich wohl falsch ausgedrückt. ich weiß wann welche flags gesetzt werden. da ich aber nich weiß wie das ergebnis aussieht kann ich natürlich nicht sagen welche nun gesetzt wurden.

RE: 0x00000000 - 0xb2d05e00 = 0x4d2fa200 2008-02-12 21:53
Anonymer User
in der letzten klausur gab es folgende frage:

zwei zahlen finden mit denen bei
z1 - z2
mindestens N und V gesetzt werden.
(angabe in hex erlaubt)

wie gehe ich das an?

RE: 0x00000000 - 0xb2d05e00 = 0x4d2fa200 2008-02-12 22:37
Fred
in der letzten klausur gab es folgende frage:

zwei zahlen finden mit denen bei
z1 - z2
mindestens N und V gesetzt werden.
(angabe in hex erlaubt)

wie gehe ich das an?
N bedeutet ja, dass das Ergebnis negativ ist. Wann ist das Ergebnis einer Subtraktion negativ? Da gibt es mehrere Fälle:
a) z1 ist bereits negativ und z2 ist positiv und nicht besonders groß (falls z2 zu groß ist, kommt es zu einem Überlauf)
b) z1 ist bereits negativ und z2 ist negativ und nicht besonders groß (falls z2 zu groß ist, wird das Ergebnis positiv)
c) z1 ist positiv und z2 ist positiv und größer als z1
d) z1 ist positiv und z2 ist negativ und es kommt zu einem Überlauf

Von den Fällen ist d) wohl der einzige, bei dem auch V gesetzt wird. Kann aber auch sein, dass ich auf die Schnelle was übersehen habe.

Also ein konkretes Beispiel wäre dann
z1 = 0x7FFFFFFF
z2 = 0xFFFFFFFF
z1 - z2 = 0x80000000 (eine negative Zahl (-> N), die aus positiv - negativ entstanden ist (-> V))

Zum Overflow hatte ich hier was geschrieben.

RE: 0x00000000 - 0xb2d05e00 = 0x4d2fa200 2008-02-12 22:41
Anonymer User
0x00000000 - 0x80000000 = 0x80000000 setzt doch C,N und V und erfüllt damit auch die Bedingung oder?

RE: 0x00000000 - 0xb2d05e00 = 0x4d2fa200 2008-02-12 22:47
Fred
Sieht gut aus. Ich bin mit 0x80000000 als Operand immer ein bischen vorsichtig, weil das die einzige negative Zahl ist, deren Betrag man im Zweierkomplement nicht darstellen kann… aber es sollte stimmen [25]

RE: 0x00000000 - 0xb2d05e00 = 0x4d2fa200 2008-02-12 23:03
Anonymer User
wie kommst du auf die zahlen

z1 = 0x7FFFFFFF
z2 = 0xFFFFFFFF
z1 - z2 = 0x80000000

ich könnte jetzt am besten in dezimalzahlen denken. oder übersehe ich da etwas und es ist einfach das in hex zu machen?

RE: 0x00000000 - 0xb2d05e00 = 0x4d2fa200 2008-02-12 23:08
Fred
wie kommst du auf die zahlen
z1 = 0x7FFFFFFF ist die größte positive Zahl, also 2.147.483.647
z2 = 0xFFFFFFFF ist -1, also die größte negative Zahl (bzw. vom Betrag her die kleinste)

Ich hatte ja mal dieses Bild gemalt, um den Overflow zu erklären:

[img]http://www.picupload.net/t-df01ab723d24e325304365e1522115b6.png[/img]

Wenn ich von der größten positiven Zahl etwas negatives abziehe (also quasi etwas positives draufaddiere), dann muss es ja zu einem Overflow kommen (größer als die größte darstellbare Zahl geht halt nicht). Somit wird der Bereich der negativen Zahlen durch Überschreiten der Überlauf-Grenze erreicht, und genau das wollen wir ja.

Auf das Bild bezogen brauchst Du einen Pfeil, der im rechten Halbkreis anfängt und über die V-Barriere in den linken Halbkreis zeigt.

RE: 0x00000000 - 0xb2d05e00 = 0x4d2fa200 2008-02-12 23:09
T
wie kommst du auf die zahlen

z1 = 0x7FFFFFFF
z2 = 0xFFFFFFFF
z1 - z2 = 0x80000000

ich könnte jetzt am besten in dezimalzahlen denken. oder übersehe ich da etwas und es ist einfach das in hex zu machen?
F - F = 0
7 - F = 8

RE: 0x00000000 - 0xb2d05e00 = 0x4d2fa200 2008-02-12 23:11
Fred
7 - F = 8
Korrekt, wobei hier ein Carry entsteht (was aber für die Aufgabenstellung irrelevant ist).