Hallo, irgendwie stehe ich gerade voll auf dem Schlauch :( Für die Uni sollen wir mit Hilfe eines Simulators [für den 2101] verschiedene Dinge lösen/ausprobieren. So sollen wir für den Zahlenbereich -1 bis 1 mit einer Schrittweite von 0.1 die vom Simulator verwendeten nächstgelegenen Fractional-Zahlen (Fixed) sowie ihre Interpretation als vorzeicenbehaftete ganze Zahlen (Integer) und als Hexadezimalzahlen angeben. Habe ich das so richtig verstanden, dass beispielsweise Dezimal 000001 (also 1) als Fractional-Zahl 0.000031 und Hex $0001 ist? Und z.B. 0.9 als Fractional 0.000275 ist? Danke für Hilfe!
Wenn ich das noch richtig im Kopf hab:
usw. Dementsprechend 0.11 = 0,5+0,25 = 0,75 etc.
Die Frage ist welches Zahlenformat der Simulator verwendet. Meistens ist das das Q1.15-Format (Q steht für die Fixkomma-Darstellung, Eins für den ganzen Teil, 15 für den Bruchteil der dargestellten Zahl), das folgendermaßen definiert ist: x: x0 x1 x2 x3 ... x15 (BIN) x = x0 * -2^0 + x1 * 2^-1 + x2 * 2^-2 + ... + x15 * 2^-15 (DEZ) Z.B.: 1-2^-15 (DEZ) = 1111.1111.1111.1111 (BIN) = FFFF (HEX) 2^-15 (DEZ) = 1000.0000.0000.0001 (BIN) = 8001 (HEX) -1 (DEZ) = 1000.0000.0000.0000 (BIN) = 8000 (HEX) 0 (DEZ) = 0000.0000.0000.0000 (BIN) = 0000 (HEX) Diese Darstellung hat den Vorteil, dass das Ergebnis einer Multiplikation immer kleiner gleich +/- Eins ist, aber mit der Addition muss man höllisch aufpassen: -1 + 2^-15 (DEZ) = 0x8000 + 0x0001 = 0x8001 = 2^-15 (DEZ)
Hallo, DANKE auch für Deine Antwort. Ich habe noch eine Frage, hänge die einfach mal hier an weil es thematisch dazu passt. Da der Assembler keine Festkommazahlen umwandeln kann sollen wir die 1.15-Werte von Hand in das hexadezimale Format umsetzen. "Berechnen Sie die hexadezimalen 24-bit-Werte" h0 = 0,048401; h1 = -0,135834; Hm, wieso 24-bit-Werte? Ich dachte 16? Zumindest habe ich per Hand h0 = 0x0640 h1 = 0xEE80 raus. Ist das also falsch? Danke!!
Rechne es halt rückwärts: Die Hex-Zahlen in Binärzahlen umwandeln. Da wo Einsen stehen wird mit der Wertigkeit des entsprechenden Bits multipliziert und aufaddiert. Das mit den 24 Bit versteh ich auch nicht, wenn von 1.15 Zahlen die Rede ist.
Hm. Ich kenne leider deinen Simulator nicht. Kann es nicht sein, dass die Aufgaben zum Verständnis da sind, und mit dem Simulator nicht unbedingt zu tun haben? Oder es kann noch sein, das es um den Akku geht, der in der Regel immer genauer ist, als der Rest des Prozessors (siehe Guard-bits). Was deine Berechnung betrifft: wenn es sich um 24 Bits handelt, musst Du auch 24 Bits benutzen, will heißen: zwei Hexa-Stellen fehlen noch.
Update: leider ist mein Beispiel vom 06.07.2009 fehlerhaft. Das Beispiel nochmal richtig: 1111.1111.1111.1111 (BIN) = FFFF (HEX) = -2^-15 (DEZ) 1000.0000.0000.0000 (BIN) = 8001 (HEX) = -1 (DEZ) 0111.1111.1111.1111 (BIN) = 8000 (HEX) = 1-2^-15 (DEZ) 0000.0000.0000.0000 (BIN) = 0000 (HEX) = 0 (DEZ)
Sorry, es war immer noch nicht richtig, aber so müsste es korrekt sein: 1111.1111.1111.1111 (BIN) = FFFF (HEX) = -2^-15 (DEZ) 1000.0000.0000.0000 (BIN) = 8000 (HEX) = -1 (DEZ) 0111.1111.1111.1111 (BIN) = 7FFF (HEX) = 1-2^-15 (DEZ) 0000.0000.0000.0000 (BIN) = 0000 (HEX) = 0 (DEZ)
Unit* schrieb: > Update: leider ist mein Beispiel vom 06.07.2009 fehlerhaft. Das Beispiel > nochmal richtig: > > 1111.1111.1111.1111 (BIN) = FFFF (HEX) = -2^-15 (DEZ) > 1000.0000.0000.0000 (BIN) = 8001 (HEX) = -1 (DEZ) Bei mir ist 1000 0000 0000 0000 = 0x8000 > 0111.1111.1111.1111 (BIN) = 8000 (HEX) = 1-2^-15 (DEZ) Und 0111 1111 1111 1111 ergibt bei mir 0x7FFF. Ah, jetzt, ja :-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.