16 bit Register
-
Ach, und größere müssen dann in den Speicher oder wie???
-
Marc++us
sorry war kurz weg!
Warum schreisst du? Was ist dein Problem er hat die Frage absolut
unkorrekt beantwortet.70000 liegt offensichtlich nicht zwischen 0 und 65535.
ist keine Antwort auf die von mir gestellte Frage.
Entweder will man eine sachbezogene und inhaltlich einigermaßen korrekte
Antwort geben oder man läßt es denn dass jemand eine Sache besser beherscht
als ein anderer gibt einem nicht das Recht sich lächerlich über den anderen
zu machen OK???
-
Tauboga schrieb:
Marc++us
sorry war kurz weg!
Warum schreisst du? Was ist dein Problem er hat die Frage absolut
unkorrekt beantwortet.70000 liegt offensichtlich nicht zwischen 0 und 65535.
ist keine Antwort auf die von mir gestellte Frage.
Entweder will man eine sachbezogene und inhaltlich einigermaßen korrekte
Antwort geben oder man läßt es denn dass jemand eine Sache besser beherscht
als ein anderer gibt einem nicht das Recht sich lächerlich über den anderen
zu machen OK???-
Seine Antwort ist eine absolut korrekte Antwort auf Deine Frage. Er hat sogar die Langversion gewählt, denn die Kurzform für Deine Antwort wäre gewesen "Nein, geht nicht". Er hat aber sogar die Begründung geliefert: weil 70000 außerhalb des gültigen Bereichs liegt geht es nicht. Sehr viel mehr gibt die Frage nicht her, tut mir leid.
-
Ich schreie nicht. Ich weise nur darauf hin, daß Du bei einer korrekten Antwort auf Deine Frage ziemlich unhöflich reagierst, was mir natürlich unangenehm auffällt.
-
Wenn ein Assembler-Profi wie Nobuo T eine solche grundlegende Frage zu Zahlendarstellungen nicht so beantwortet wie Du Dir erhoffst, so gibt es zwei Möglichkeiten:
a) er hat die Frage nicht so verstanden, wie Du es Dir dachtest
Also überarbeite die Frage noch einmal, formuliere sie um, ergänze sie.
b) er wollte Dich reinlegen
Das scheidet aber aus. Denn wie soll er Dich mit einer korrekten Antwort reinlegen? Das ergibt keinen Sinn. -
Ich finde die Antwort von ihm auf Deine Frage ebenfalls korrekt und sogar überausführlich. Wenn Du von dem Ergebnis enttäuscht oder überrascht bist, mußt Du die Frage so umformulieren, daß wir sie verstehen. Manchmal verstehen wir Fragen zu Grundlagen nicht richtig, weil uns viele Dinge automatisch bereits klar sind.
-
-
OK!
Nun ein zweiter Versuch?
Wie speichert man bei einem 16 bit Register
z.B die Zahl 70 000 (dezimal).
Wenn dies nicht möglich ist schließe ich aus dieer Tatsache
fest, dass der PC damals nur bis 65535 zählen konnte.
Ist das korrekt?
Wenn nicht wie hat man soetwas realisiert?Grüße
-
Wie wir dir bereits ca. 2000000 mal erzählt haben konnte der PC damals nicht mehr in den Registern speichern. Ausserdem habe ich ausgerechnet, das ein 32 Bit CPU (z.B. 486er) Zahlen bis zu 4294967296 speichern kann. Wie du aber bei einem 16 Bit CPU die Zahl 70000 speichern kannst weiss ich nicht und habe deshalb gefragt. Vielleicht könntest du uns auch nochmal erzählen, was du mit der Zahl 70000 anfangen willst (außer meinen IQ ausrechnen
). Dann können wir dir vielleicht sagen, was du machen sollst...
-
Man kann die Zahl 70000 in 2 16-Bit-Register aufteilen - der Teil mit den Bits 31..16 kommt in ein Register, der andere Teil 0..15 in das andere Register.
Viele CPUs haben spezielle Befehle, um dann eine Operation mit zwei solcher "künstlich" zusammengeschalteter Register auszuführen. Diese Operationen sind dann aber in der Regel langsamer als normale Befehle.
Ansonsten kann die CPU die Operation auch im Speicher ausführen, d.h. sie legt den Wert nicht mehr in Registern ab, sondern an 4 aufeinanderfolgenden Bytes im Speicher. Aber auch dies ist langsamer.
Andere Wege gibt's nicht.
-
Niklas Cathor
ha du bist ja ein Käpsele dass du bis ca. 2000000 zählen kannst hätte ich dir
ehrlich gesagt nicht zugetraut.Den Beitrag von Marc++us solltest du dir unbedingt reinziehen
-
Was haltet Ihr davon?
Die Zahl wird dann abgeschnitten.
70000 = 10001000101110000 binär
wenn dann das 17bit abgeschnitten wird,
ergibt das
0001000101110000 binär = 4464
Wer kann mir das erklären???
-
Was gitbs denn da noch groß zu erklären
Wenn du versuchst eine 17-Bit-Zahl in ein 16-BIt-Register zu stopfen werden nur 16 Bit, nämlich die unteren 16 gespeichert, alles darüber hinaus lässt man einfach weg.
-
Hi Nicklas Cathor!
Du schreibstWie wir dir bereits ca. 2000000 mal erzählt haben konnte der PC damals nicht mehr in den Registern speichern
Wo hat man denn sonst die Zahl 70 000 gespeichert.
Oder konnte man solche Berechnungen garnicht durchführenGrüße
-
Das wurde schon weiter oben gesagt.
Aber weil ich so nett bin, nochmal zum mitschreiben:
Es geht nicht direkt.
Die einzige Methode ist es, das zu "simulieren". Und zwar indem man zwei Register zusammen benutzt. Man sagt einfach, in Register Nr. 1 stehen die unteren 16 Bit von 70000 und in Register Nr. 2 die oberen 16 Bit.Schau dir QBASIC an: Welchen Wertebereich hatten die integer? Konnte man die Zahl 70000 darin speichern?
Wieder zurück zu C++:
Kannst du heute in irgendeiner ganzzahligen Variable mehr als 2^64 (=zwei 32Bit-Register) speichern?Hmmm...
Vielleicht wartest du auf eine Antwort wie: Fließkommazahlen.
Die können nämlich viel größere Werte speichern, allerdings auf Kosten der Genauigkeit.Beschreib mal genauer, was du wissen willst.
"Das geht nicht" ist bis jetzt die korrekte Antwort auf deine Fragerei.
-
cd9000 danke für die so ausführliche Antwort.
Das ist schon möglich dass ich vielleicht meine Frage nicht genau genug
formuliert habe.
Auf die Feststellung von mir
Die Register hätten bis zum 286er Prozessor eine größe von
16 Bits erst ab dem 386 waren die 32 Bit Register verfügbar.
lautet deine Antwort
Zitat... indem man zwei Register zusammen benutzt.
soweit ist alles klar
Wie soll ich mir aber das einprägen
Register Nr. 1 stehen die unteren 16 Bit von 70000 und in Register Nr. 2 die oberen 16 Bit
.
nehmen wir an wir die Zahl 80 000 als Beispiel
1001110001000000 als binär (wie funzt das nun mit oben uns unten)
-
10011100010000000 ist die Zahl (80000). Du hast bei der Binärdarstellung eine 0 am Ende vergessen.
ungetestet:
; So speichern wir 80000 in 2 Registern ab: mov ax, 0000000000000001b ; Die oberen 16 Bit von 80000 mov dx, 0011100010000000b ; Die unteren 16 Bit " " ; Beim Addieren muss der 2. Summand zu den unteren Bits addiert werden. ; Danach muss der Übertrag auf die oberen 16 Bit übertragen werden. ; (Das klappt nur mit Summanden < 2^16) add dx, 1234 adc ax, 0
So oder ähnlich würde das gemacht werden, wenn es keine 32-Bit-Register gäbe.
Vielleicht gibt es auch direkte Assemblerbefehle, die beide Register in einem Rutsch verändern. Die sind mir aber gerade nicht bekannt.
-
Also hat man dem nach damals dieses Verfahren angewendet um z.B eine
Rechenoperation durchzuführen wie 80 000 + 70 000 = 150 000
-
Tauboga schrieb:
Also hat man dem nach damals dieses Verfahren angewendet um z.B eine
Rechenoperation durchzuführen wie 80 000 + 70 000 = 150 000Ganz genau, multiplikation wird etwas schwieriger, aber auch in 5 schritten machbar soweit ich erinnere. Und die Division wird vom x86 sowieso in dieser form unterstützt.