16 bit Register



  • Hallo!
    16 bit Register kann Zahlen von 0 bis 65535
    aufnehmen.(Laut ein Buch)
    Bedeutet das, dass das Register z.B
    die Zahl 70000 nicht aufnehmen könnte.
    (Das Gleiche auch hier: Low und High Teil können Zahlen
    von 0 bis 255 aufnehmen. was wäre mit 270)

    Grüße



  • Tauboga schrieb:

    ...Bedeutet das, dass das Register z.B
    die Zahl 70000 nicht aufnehmen könnte.

    70000 liegt offensichtlich nicht zwischen 0 und 65535.
    Folglich kann ein 16 bit Register die Zahl 70000 nicht aufnehmen.

    Tauboga schrieb:

    (Das Gleiche auch hier: Low und High Teil können Zahlen
    von 0 bis 255 aufnehmen. was wäre mit 270)

    Das gleiche: 270 liegt offensichtlich nicht zwischen 0 und 255.
    Folglich kann ein 8 bit Register (Low und High Teil eines 16 bit Registers) die Zahl 270 nicht aufnehmen.



  • Nobuo T!

    Hättest du lieber garnichts geschrieben wäre glaube ich sogar besser.
    Denn diese Antwort ist sowas von schlecht ich weiss nicht ob du nicht
    lieber dein Rasen im Garten mähen solltest oder etwas anderes .....



  • Kann mir bitte jemand diese Frage beantworten.
    Aber nur wenn es ehrlich gemeint ist.
    Welches Register kann dann die Zahl 70000 aufnehmen?

    Es geht nämlich darum, zu verstehen wie das ganze funktioniert
    mit Zahlen die > sind als 65535.

    Danke



  • Was willst Du?

    Nobuo hat Dir doch eine eindeutige und richtige Antwort auf Deine ursprüngliche(!) Frage gegeben:

    Es geht nicht. Ein 16Bit-Register kann keine 70000 aufnehmen, ein 8Bit-Register (was ja LO/HI vom 16Bit sind) keine 270.

    Nun blaffst Du ihn an und änderst die Frage - ist ein wenig unhöflich und auch wenig sachlich.

    Sei Dir die Antwort dennoch gegeben: Du wirst dann wohl zum nächstgrößeren Register übergehen müssen, dem 32-Bit-Register (oder falls Du zufällig einen DSP hast, da gibt's auch bereits 24-Bit-Register).



  • Moment, bedeutet das etwa, dass ein 16 Bit Prozessor nicht weiter als bis 65535 rechnen kann??? Is aber etwas arg eingeschränkt oder??? 😃 Kann dann ein 32 Bit bis 4294967296??? Nach meiner Rechnung schon... 😞

    PS: Ich will einen 256 Bit!!! Der kann 1,1579208923731619542357098500869e+77!!! Was immer das Bedeutet........



  • Niklas Cathor schrieb:

    Moment, bedeutet das etwa, dass ein 16 Bit Prozessor nicht weiter als bis 65535 rechnen kann???

    Nein. Es bedeutet nur, daß er keine Zahlen größer als 16Bit in seinen Registern halten kann. 😉



  • 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???

    1. 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.

    2. 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.

    3. 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.

    4. 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 schreibst

    Wie 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ühren

    Grüß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.


Anmelden zum Antworten