16 bit Register
-
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.