dummi: 64 bit RAM - Speicherbereich

Hallo,
ich bin vermutlich zu dumm, um es im Internet zu finden, aber mich quälen einige Fragen.
Heute quält mich zum Beispiel die Frage, wie das mit dem Speicherbereichen unter 64 bit ist. Ich weiß, dass ich 2 hoch 64 Adressen habe, um Speicherbereiche zu adressieren. Aber diese Speicherzellen können doch nicht alle gleich groß sein? Aber müssen sie doch!
Welche Größe haben sie denn nun, diese Speicherzellen? Sind es bei einem 64bit-System wirklich pro Adresse 64 bit Wordbreite? Und waren es bei den 8-bittern tatsächlich 16 bit? Ist also die Wortbreite äquivalent zur Anzahl der Adressen?

Etwas Licht ins Dunkel des Dummis bitte

  1. Mahlzeit,

    Etwas Licht ins Dunkel des Dummis bitte

    Kommt drauf an, wie du Speicherzelle definierst, für mich hat eine Speicherzelle exakt 1 Bit.

    --
    42
    1. Hallo,

      Kommt drauf an, wie du Speicherzelle definierst, für mich hat eine Speicherzelle exakt 1 Bit.

      ok. also meinst du, jede Adresse adressiert genau 1 Bit? Nein, das meinst du vermutlich nicht. Mir geht es jetzt erstmal nur darum. Speicherzelle ist vermutlich der falsche Begriff gewesen, sorry.

      Sagen wir mal so. Ich mache folgendes in C:

      int x = 3;
      int y = 3;

      dann haben x und y verschiedene Adressen im Speicher. Wenn die adressierbare Wortbreite immer 64 bit wäre, wäre das eine ganz schöne Verschwendung von Speicher. Oder nicht?

      1. Mahlzeit,

        ok. also meinst du, jede Adresse adressiert genau 1 Bit? Nein, das meinst du vermutlich nicht

        Doch, genau das meine ich. Inwiefern auf einem Speicherriegel noch eine Speicherverwaltung integriert ist, weiss ich nicht. So tief bin ich in PC-Hardware nie eingestiegen, ich arbeite im Embedded-Bereich noch mit 8 Bit wenn ich from Scratch programmiere. Bei schnelleren Boards wie dem PI hab ich wieder ein BS, das die Speicherverwaltung übernimmt.

        Mir geht es jetzt erstmal nur darum. Speicherzelle ist vermutlich der falsche Begriff gewesen, sorry.

        Kommt immer drauf an, was du meinst ;)

        Sagen wir mal so. Ich mache folgendes in C:

        int x = 3;
        int y = 3;

        dann haben x und y verschiedene Adressen im Speicher. Wenn die adressierbare Wortbreite immer 64 bit wäre, wäre das eine ganz schöne Verschwendung von Speicher. Oder nicht?

        Dafür gibt es ja Speicheverwaltungen. Ich gehe davon aus, das Betriebssystem ist so intelligent, dass der Speicher gut ausgenutzt wird, sonst wäre der wirklich schlecht genutzt.
        Allerdings werden in deinem Beispiel ja nicht nur der Wert gespeichert sondern auch die Typ und der Name. Da sind 64 Bit eh zuwenig.

        --
        42
        1. Hallo,

          Sagen wir mal so. Ich mache folgendes in C:

          int x = 3;
          int y = 3;
          [...]
          Allerdings werden in deinem Beispiel ja nicht nur der Wert gespeichert sondern auch die Typ und der Name.

          in C? Nein.
          Wenn Compiler und Linker mit ihrer Arbeit fertig ist, enthält der fertige ausführbare Code keine Informationen über Bezeichner und Typen mehr (ausgenommen Interface-Bereiche von Shared Objects/DLLs, oder wenn explizit Debug-Informationen generiert werden sollen).

          Ciao,
           Martin

          --
          Wenn Zeit das Kostbarste ist, was wir haben, dann ist Zeitverschwendung die größte aller Verschwendungen.
            (Benjamin Franklin, amerikanischer Tüftler und Politiker)
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          1. Mahlzeit,

            in C? Nein.
            Wenn Compiler und Linker mit ihrer Arbeit fertig ist, enthält der fertige ausführbare Code keine Informationen über Bezeichner und Typen mehr (ausgenommen Interface-Bereiche von Shared Objects/DLLs, oder wenn explizit Debug-Informationen generiert werden sollen).

            Ich hab mir selten kompilierten C-Code angesehen, aber selbst im Assembler brauche ich zu einem Wert zumindest das Register, indem er gespeichert wird.
            Ich muss dir deine Aussage also erstmal glauben, weil ich es nicht weiss ;)

            --
            42
            1. Hallo,

              in C? Nein.
              Wenn Compiler und Linker mit ihrer Arbeit fertig ist, enthält der fertige ausführbare Code keine Informationen über Bezeichner und Typen mehr (ausgenommen Interface-Bereiche von Shared Objects/DLLs, oder wenn explizit Debug-Informationen generiert werden sollen).
              Ich hab mir selten kompilierten C-Code angesehen

              ich dagegen eine Zeitlang sehr oft, vor allem im Debugger, und ich habe unter DOS, später auch unter Windows gern und oft meine C-Programme mit kleinen Assembler-Einlagen aufgemöbelt. Daher weiß ich so ungefähr, wie der vom Compiler erzeugte Code aussieht.

              aber selbst im Assembler brauche ich zu einem Wert zumindest das Register, indem er gespeichert wird.

              Ja, stimmt. Aber lass uns ein Beispiel betrachten. Nehmen wir folgendes C-Fragment:

              #define LSB(x) *((BYTE*)&x+0)  
              #define MSB(x) *((BYTE*)&x+1)  
                
              WORD w;  
              BYTE l,h;  
                
              w = 0x381A;  
              l = LSB(w);  
              h = MSB(w);
              

              Das compilieren wir jetzt auf einer 16bit-CPU wie etwa dem 8086. Dann erhalten wir als Assembler-Ausschnitt beispielsweise folgenden Code:

              MOV   WORD PTR [0288], 381A  
              MOV   AL,[0288]  
              MOV   [028A],AL  
              MOV   AL,[0289]  
              MOV   [028B],AL
              

              Aus diesem Code-Fragment erkennt man nicht mehr, dass die Adresse 0x0288 eigentlich einem WORD (16bit) zugeordnet war, man kann es höchstens aus der WORD-Zuweisung in der ersten Zeile noch vermuten.

              Auch die Registerbreite ist nicht immer eine Hilfe: Es kann durchaus sein, dass der Compiler der Optimierung halber einen 16bit-Wert z.B. in EAX, also ein 32bit-Register lädt, um danach eine 32bit breite Rechenoperation durchzuführen.

              Ich muss dir deine Aussage also erstmal glauben, weil ich es nicht weiss ;)

              Danke für den Vertrauensvorschuss. :-)

              Schönen Abend noch,
               Martin

              --
              Eine Neandertaler-Sippe sitzt in ihrer kalten Höhle. Seufzt der Stammesälteste: "Hoffentlich erfindet bald jemand das Feuer!"
              Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
              1. Mahlzeit,

                wieder was gelernt ;)
                Ich werd wohl mehr von meinem C-Programmen mal im Assembler anschaun.
                Bisher hab ich zeitkritische Sachen immer direkt in Assembler programmiert.

                --
                42
  2. Guten Tag.

    Heute quält mich zum Beispiel die Frage, wie das mit dem Speicherbereichen unter 64 bit ist. Ich weiß, dass ich 2 hoch 64 Adressen habe, um Speicherbereiche zu adressieren. Aber diese Speicherzellen können doch nicht alle gleich groß sein?

    Wie kommst du darauf, sie könnten nicht alle gleich groß sein? Das wäre ein heilloses Chaos, wenn Adresse 5 weniger (oder mehr) Daten speichern könnte als Adresse 8.

    Aber müssen sie doch!

    Sind sie auch.

    Es gibt Ausnahmen bei Adressen, die keine Speicherzellen, sondern Funktionsregister ansprechen, dort können einzelne Bits keine Funktion haben. Aber die Adressen zeigen trotzdem samt und sonders auf gleich große Worte.

    Welche Größe haben sie denn nun, diese Speicherzellen?

    Ein Byte. Die kleinste adressierbare Einheit ist heutzutage üblicherweise genau ein Byte groß.
    Natürlich lassen sich mehrere nebeneinanderliegende Bytes zu größeren Wörtern zusammenfassen (d.h. mit einer Instruktion lassen sich mehrere Bytes als Einheit bearbeiten, denn wir wollen ja gerne auch mit größeren Zahlen als 255 arbeiten) und auch jedes Byte bleibt selbstverständlich in 8 Bits unterteilt, aber die Adressen "zielen" auf Bytes.

    Sind es bei einem 64bit-System wirklich pro Adresse 64 bit Wordbreite?

    _Diese_ 64 Bit, also die, von denen zur Zeit in der Werbung meist die Rede ist, beziehen sich auf die Adresse, nicht auf die Daten. Jede Adresse besteht aus 64 Bit und adressiert ein Byte.

    Und waren es bei den 8-bittern tatsächlich 16 bit?

    Zu jenen Zeiten war Elektronik rar und teuer, die Adressbreite von Konzept zu Konzept entsprechend unterschiedlich, ebenso die Datenbreite.
    Schaut man ganz genau hin, gibt es auch Prozessoren, die intern größere Wortbreiten haben als sich extern anschließen lässt, schlichtweg um die Verdrahtung günstiger zu machen.

    Insofern würde ich das nicht pauschalisieren. Es gibt solche und solche.

    Ist also die Wortbreite äquivalent zur Anzahl der Adressen?

    Nein, schon alleine, weil in dieser Aussage nicht so ganz klar ist, wessen Wortbreite du meinst.

    Schönen Tag.

    1. Mahlzeit,

      Ein Byte. Die kleinste adressierbare Einheit ist heutzutage üblicherweise genau ein Byte groß.

      Seit wann ist das so?
      Wie erwähnt stecke ich nur tief in 8-Bit Hardware (16-Bit kommt jetzt, weil viele Embedded-Systeme mit 8-Bit zu schwach werden), da wird immer noch jedes Bit addressiert.

      --
      42
      1. Meine Herren!

        Ein Byte. Die kleinste adressierbare Einheit ist heutzutage üblicherweise genau ein Byte groß.

        Seit wann ist das so?
        Wie erwähnt stecke ich nur tief in 8-Bit Hardware (16-Bit kommt jetzt, weil viele Embedded-Systeme mit 8-Bit zu schwach werden), da wird immer noch jedes Bit addressiert.

        Ich verstehe dich nicht ganz. Mit 8-Bit Adressbus und 1-Bit Datenbus lassen sich genau 2^8-Bit = 256 Bit adressieren. Anders formuliert bedeutet das auch, dass ich 8 Bit anstrengen muss, um 1 Bit zu lesen, das scheint mir recht unüblich (auch wenn ich nicht in der Hardware-Welt zu Hause bin).

        Nenn doch mal zwei, drei Architekturen mit denen du arbeitest, dann lässt sich diese Unklarheit vielleicht ausräumen.

        --
        “All right, then, I'll go to hell.” – Huck Finn
        1. Mahlzeit,

          Ich verstehe dich nicht ganz. Mit 8-Bit Adressbus und 1-Bit Datenbus lassen sich genau 2^8-Bit = 256 Bit adressieren. Anders formuliert bedeutet das auch, dass ich 8 Bit anstrengen muss, um 1 Bit zu lesen, das scheint mir recht unüblich (auch wenn ich nicht in der Hardware-Welt zu Hause bin).

          Wenn mein Datenbus entsprechend breit ist, kann ich doch jedes Bit einzeln lesen, ich seh das Problem nicht.

          Nenn doch mal zwei, drei Architekturen mit denen du arbeitest, dann lässt sich diese Unklarheit vielleicht ausräumen.

          AVR, basiert auf Z80, der wiederum ein Ableger des 8080 ist, also der Urvater der aktuellen Intel-Architektur.
          Aktuell steige ich auf ARMs um, die ich bisher nur in Form von ner Himbeere nutze.

          Bit-Schubsen geht aber auf RISC wie auf i386 zumindest in Assembler. Wie das intern verwaltet wird, kann ich bei i386 nicht sagen.

          --
          42
          1. Meine Herren!

            Ich verstehe dich nicht ganz. Mit 8-Bit Adressbus und 1-Bit Datenbus lassen sich genau 2^8-Bit = 256 Bit adressieren. Anders formuliert bedeutet das auch, dass ich 8 Bit anstrengen muss, um 1 Bit zu lesen, das scheint mir recht unüblich (auch wenn ich nicht in der Hardware-Welt zu Hause bin).

            Wenn mein Datenbus entsprechend breit ist, kann ich doch jedes Bit einzeln lesen, ich seh das Problem nicht.

            Technisch machbar ist das schon. Aber ökonomisch zweifelhaft. Wieso sollte man die 256 Adressen die man hat, verschwenden um einzelne Bits zu adressieren? Vor allem, wenn die ALU sowieso 8 Bit Wortbreite hat. Das ist Verschwendung von Speicher und Rechenzeit. Als einfaches Beispiel: Man bräuchte 8 Leseoperationen, nur um einen Zeiger aus dem Speicher zu lesen, das selbe könnte man in einer Operation erreichen.

            Nenn doch mal zwei, drei Architekturen mit denen du arbeitest, dann lässt sich diese Unklarheit vielleicht ausräumen.

            AVR, basiert auf Z80, der wiederum ein Ableger des 8080 ist, also der Urvater der aktuellen Intel-Architektur.

            AVR hat viele Reihen an Mikroprozessoren. Ich habe nur mal mit dem ATmega 644 gearbeitet und da bin ich nie in den Genuss gekommen einzelne Bits adressieren zu müssen. Natürlich mussten mal einzelne Bits gesetzt oder gelöscht werden, aber dafür war dann trotzdem ein Datenwort von 8 Bit anzulegen, dass die übrigen 7 Bits unverändert blieben, lag in der Verantwortung des Programmierers und wurde von Hardware-Seite aus nicht gewährleistet.

            Bit-Schubsen geht aber auf RISC wie auf i386 zumindest in Assembler.

            Ich verstehe nicht wie das mit dem Thema zusammenhängt.

            --
            “All right, then, I'll go to hell.” – Huck Finn
            1. Hi,

              Ich verstehe dich nicht ganz. Mit 8-Bit Adressbus und 1-Bit Datenbus lassen sich genau 2^8-Bit = 256 Bit adressieren. Anders formuliert bedeutet das auch, dass ich 8 Bit anstrengen muss, um 1 Bit zu lesen, das scheint mir recht unüblich (auch wenn ich nicht in der Hardware-Welt zu Hause bin).

              Wenn mein Datenbus entsprechend breit ist, kann ich doch jedes Bit einzeln lesen, ich seh das Problem nicht.

              Niemand adressiert ein Bit, das ist Unsinn. Wie von dir schon erwähnt, hätte man bei 8bit Adressbus dann nur 256 Bit zur Verfügung. Umgerechnet können also nur 32 Byte RAM adressiert werden. Wer sollte sowas haben wollen? Das müsste man sich schon selber zusammenbasteln sowas.

              1. Mahlzeit,

                Niemand adressiert ein Bit, das ist Unsinn.

                Also weltweit viele tausende Programmierer aus dem Embedded-Bereich als "niemand" und ihre Arbeit als Unsinn zu bezeichnen ist schon sehr fragwürdig ....

                --
                42
                1. Mahlzeit,

                  Niemand adressiert ein Bit, das ist Unsinn.

                  Also weltweit viele tausende Programmierer aus dem Embedded-Bereich als "niemand" und ihre Arbeit als Unsinn zu bezeichnen ist schon sehr fragwürdig ....

                  Aber die Programmierer aus dem 8-Bit-Embedded-Bereich adressieren auch alle Bytes, maskieren diese und shiften ggf. noch und haben so den Bitwert in einem Byte.

                  1. Mahlzeit,

                    Aber die Programmierer aus dem 8-Bit-Embedded-Bereich adressieren auch alle Bytes, maskieren diese und shiften ggf. noch und haben so den Bitwert in einem Byte.

                    Es gibt aber Architekturen mit weniger als 8 Bit. Vorallem in der SPS sind 1Bit Prozessoren verbreitet. Oder sind da die Programmierer auch alle "niemand"?
                    Also nicht eine Pauschalaussage inkl. Beleidigung mit Unwissen rechtfertigen.

                    --
                    42
                    1. Es gibt aber Architekturen mit weniger als 8 Bit.

                      Ich will nicht bestreiten, daß es soetwas gibt.

                      Vorallem in der SPS sind 1Bit Prozessoren verbreitet.

                      Ob es sowas mal gab, weiss ich nicht, aber heutzutage sind das vermutlich meist 32Bit Prozessoren, aber sicher auch noch ein paar mit 8 Bit.

                      Also nicht eine Pauschalaussage

                      Hier ging es um um 8 Bit Prozessoren, deswegen extra "aus dem 8-Bit-Embedded-Bereich" um genau dies hier zu vermeiden.

                      inkl. Beleidigung mit Unwissen rechtfertigen.

                      Wo war hier eine Beleidigung?

                      1. Mahlzeit,

                        Vorallem in der SPS sind 1Bit Prozessoren verbreitet.
                        Ob es sowas mal gab, weiss ich nicht, aber heutzutage sind das vermutlich meist 32Bit Prozessoren, aber sicher auch noch ein paar mit 8 Bit.

                        Quelle?

                        Also nicht eine Pauschalaussage
                        Hier ging es um um 8 Bit Prozessoren, deswegen extra "aus dem 8-Bit-Embedded-Bereich" um genau dies hier zu vermeiden.

                        Nein, es ging um Embedded-Systeme und darum, womit ich arbeite. Und ICH arbeite mit 8 Bit

                        inkl. Beleidigung mit Unwissen rechtfertigen.
                        Wo war hier eine Beleidigung?

                        Programmierer als "Niemand" zu bezeichnen und ihre Arbeit als "Unsinn" ist für dich keine Beleidigung?
                        Ok, du bist ein Niemand und deine Arbeit ist Unsinn. Ist ja nicht beleidigend ....

                        --
                        42
                        1. Vorallem in der SPS sind 1Bit Prozessoren verbreitet.
                          Ob es sowas mal gab, weiss ich nicht, aber heutzutage sind das vermutlich meist 32Bit Prozessoren, aber sicher auch noch ein paar mit 8 Bit.

                          Quelle?

                          Hab ich keine.

                          Also nicht eine Pauschalaussage
                          Hier ging es um um 8 Bit Prozessoren, deswegen extra "aus dem 8-Bit-Embedded-Bereich" um genau dies hier zu vermeiden.

                          Nein, es ging um Embedded-Systeme und darum, womit ich arbeite. Und ICH arbeite mit 8 Bit

                          Ja, dann sind wir uns doch eigentlich einig in dem Punkt?

                          inkl. Beleidigung mit Unwissen rechtfertigen.
                          Wo war hier eine Beleidigung?

                          Programmierer als "Niemand" zu bezeichnen und ihre Arbeit als "Unsinn" ist für dich keine Beleidigung?

                          Das hat doch niemand, ich schon gar nicht.

                          1. Mahlzeit,

                            Das hat doch niemand, ich schon gar nicht.

                            https://forum.selfhtml.org/?t=217337&m=1492708

                            Ich wusste nicht, dass du es mit dem Lesen nicht so hast. Ich lese idR den Zweig, in dem ich poste und hab das von dir auch gedacht.

                            --
                            42
                            1. Das hat doch niemand, ich schon gar nicht.

                              https://forum.selfhtml.org/?t=217337&m=1492708

                              Ich wusste nicht, dass du es mit dem Lesen nicht so hast. Ich lese idR den Zweig, in dem ich poste und hab das von dir auch gedacht.

                              Das mach auch ich, aber dort wurden weder Programmierer als "Niemand" bezeichnet, noch ihre Arbeit als "Unsinn".
                              http://grundschule-nachhilfe.de/post/Download-Arbeitsblatt-zum-sinnerfassenden-Lesen-Sachkunde-Deutsch-Klasse-12.aspx

                              1. Mahlzeit,

                                Was zahlst du eigentlich demjenigen, der deinem Unsinn noch ein fachlich hilfreich gibt?

                                --
                                42
                                1. Was zahlst du eigentlich demjenigen, der deinem Unsinn noch ein fachlich hilfreich gibt?

                                  8 bit

                                  1. Meine Herren!

                                    Was zahlst du eigentlich demjenigen, der deinem Unsinn noch ein fachlich hilfreich gibt?

                                    8 bit

                                    Die würde ich gerne einfordern ;)

                                    --
                                    “All right, then, I'll go to hell.” – Huck Finn
                                    1. Die würde ich gerne einfordern ;)

                                      Dann müsstest du aber deine Adresse hier posten, damit ich das Byte an die richtige stelle schicke.

                  2. Hi,

                    Niemand adressiert ein Bit, das ist Unsinn.
                    Also weltweit viele tausende Programmierer aus dem Embedded-Bereich als "niemand" und ihre Arbeit als Unsinn zu bezeichnen ist schon sehr fragwürdig ....
                    Aber die Programmierer aus dem 8-Bit-Embedded-Bereich adressieren auch alle Bytes, maskieren diese und shiften ggf. noch und haben so den Bitwert in einem Byte.

                    das können sie tun, wenn sie einzelne Bits von Werten im Arbeitsspeicher lesen oder manipulieren wollen. Aber viele µC wie etwa die Familie der 8051-Kompatiblen verfügen tatsächlich über CPU-Instruktionen, mit denen ein Bit direkt adressiert wird. Das ist dann allerdings auf einen reservierten Adressbereich beschränkt, und die meisten Bits, die dort wohnen, sind speziellen internen Funktionen des µC zugeordnet (oder korrelieren direkt mit I/O-Pins).

                    Ciao,
                     Martin

                    --
                    Man soll den Tag nicht vor dem Abend loben.
                    Und den Mann nicht vor dem Morgen.
                      (alte Volksweisheit)
                    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                    1. Hi,

                      Niemand adressiert ein Bit, das ist Unsinn.
                      Also weltweit viele tausende Programmierer aus dem Embedded-Bereich als "niemand" und ihre Arbeit als Unsinn zu bezeichnen ist schon sehr fragwürdig ....
                      Aber die Programmierer aus dem 8-Bit-Embedded-Bereich adressieren auch alle Bytes, maskieren diese und shiften ggf. noch und haben so den Bitwert in einem Byte.

                      das können sie tun, wenn sie einzelne Bits von Werten im Arbeitsspeicher lesen oder manipulieren wollen. Aber viele µC wie etwa die Familie der 8051-Kompatiblen verfügen tatsächlich über CPU-Instruktionen, mit denen ein Bit direkt adressiert wird. Das ist dann allerdings auf einen reservierten Adressbereich beschränkt, und die meisten Bits, die dort wohnen, sind speziellen internen Funktionen des µC zugeordnet (oder korrelieren direkt mit I/O-Pins).

                      Wie gesagt, auch der 8051 hat 8-Bit-Adressen. Und zu der Bit-Adressierbarkeit:

                      "The Special Function Register (SFR) is the upper area of addressable memory, from address 0x80 to 0xFF. This area of memory cannot be used for data or program storage, but is instead a series of memory-mapped ports and registers. "
                      (wikipedia)

                      Bitadressen umfassen die Adressen 80H bis ffH. Die Frage des OP war aber eine sehr viel allgemeinere.

                      1. Bitadressen umfassen die Adressen 80H bis ffH. Die Frage des OP war aber eine sehr viel allgemeinere.

                        Die Aussage von M. war sehr speziell:

                        Wie erwähnt stecke ich nur tief in 8-Bit Hardware ... da wird immer noch jedes Bit addressiert.

                        Das es spezielle Bits gibt, auf die mit speziellen Befehlen zugegriffen werden kann, bestreitet ja keiner, die gibt es in allen(muss ich jetzt ein vermutlich davor setzen?) Prozessoren, aber was über einen 8 Bit Datenbus geht ist ein Byte, und wird als Byte adressiert.
                        (Das hat Der Martin mMn auch genau so gemeint.)
                        (Der 8051 hat 16 Bit Adressen.)

                      2. Hallo,

                        Wie gesagt, auch der 8051 hat 8-Bit-Adressen.

                        nein, 16bit, wobei MSB und LSB der Adresse im Zeitmultiplex über dieselben Pins nach außen gehen. Ein Speicherzugriff bedeutet also mindestens zwei Taktzyklen:

                        * MSB der Adresse auf den Multiplex-Adressbus legen, ALE aktiv setzen. Ein externes 8bit-Latch
                           speichert nun diese 8 Adressbits.
                         * LSB der Adresse auf den Multiplex-Adressbus legen, ALE inaktiv setzen, und im gleichen Zyklus
                           entweder das 8bit-Datenwort auf den Datenbus aufschalten (Schreibzyklus) oder von dort lesen
                           (Lesezyklus).

                        Theoretisch wären so mehrere aufeinanderfolgende Speicherzugriffe möglich, ohne das MSB der Adresse neu auszugeben und so einen Taktzyklus pro Speicherzugriff einzusparen, solange sich das MSB nicht ändert. Ich weiß aber nicht, ob die interne Adresslogik das tut. Ich glaube eher nicht. Das hat aber auch mit der ursprünglichen Frage nichts zu tun.

                        Ciao,
                         Martin

                        --
                        Der Bäcker schlägt die Fliegen tot
                        Und macht daraus Rosinenbrot.
                        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    2. Hallo,

      Wie kommst du darauf, sie könnten nicht alle gleich groß sein? Das wäre ein heilloses Chaos, wenn Adresse 5 weniger (oder mehr) Daten speichern könnte als Adresse 8.

      Ebent. Deshalb die nächtliche Verwirrung!

      Aber müssen sie doch!

      Sind sie auch.

      Gott sei Dank, da bin ich aber froh.

      Es gibt Ausnahmen bei Adressen, die keine Speicherzellen, sondern Funktionsregister ansprechen, dort können einzelne Bits keine Funktion haben. Aber die Adressen zeigen trotzdem samt und sonders auf gleich große Worte.

      Sehr gut, so soll es sein.

      Welche Größe haben sie denn nun, diese Speicherzellen?

      Ein Byte. Die kleinste adressierbare Einheit ist heutzutage üblicherweise genau ein Byte groß.

      Ich DACHTE es mir heute Nacht noch, nur wollte ich es nicht aussprechen. 1 Byte also.
      Dann ist es also klar. Ein int in C ist für gewöhnlich 32 bit, also benötigt dieses Int 4 Byte. Also sind damit schon 4 Speicheradressen futschikato?

      Sind es bei einem 64bit-System wirklich pro Adresse 64 bit Wordbreite?

      _Diese_ 64 Bit, also die, von denen zur Zeit in der Werbung meist die Rede ist, beziehen sich auf die Adresse, nicht auf die Daten. Jede Adresse besteht aus 64 Bit und adressiert ein Byte.

      alles klar. Das war deutlich. Das kann man sich merken.

      Und waren es bei den 8-bittern tatsächlich 16 bit?

      Zu jenen Zeiten war Elektronik rar und teuer, die Adressbreite von Konzept zu Konzept entsprechend unterschiedlich, ebenso die Datenbreite.
      Schaut man ganz genau hin, gibt es auch Prozessoren, die intern größere Wortbreiten haben als sich extern anschließen lässt, schlichtweg um die Verdrahtung günstiger zu machen.

      Insofern würde ich das nicht pauschalisieren. Es gibt solche und solche.

      Ist also die Wortbreite äquivalent zur Anzahl der Adressen?

      Nein, schon alleine, weil in dieser Aussage nicht so ganz klar ist, wessen Wortbreite du meinst.

      Ich meinte die Wortbreite der Speicherzellen. Da diese aber 1 Byte ist, wie man auch hier lesen kann, war meine Annahme falsch und ich bin wieder etwas weniger dumm.

      Danke, Karl-Franz zu Ferdiand

      1. Hi,

        Ein Byte. Die kleinste adressierbare Einheit ist heutzutage üblicherweise genau ein Byte groß.
        Ich DACHTE es mir heute Nacht noch, nur wollte ich es nicht aussprechen. 1 Byte also.
        Dann ist es also klar. Ein int in C ist für gewöhnlich 32 bit, also benötigt dieses Int 4 Byte. Also sind damit schon 4 Speicheradressen futschikato?

        ja, genau. Wenn du ein int an Adresse 7384 speicherst, belegt dieser Wert automatisch die Adressen 7384, 7385, 7386 und 7387 im Arbeitsspeicher. Dieses Weiterschalten auf die nächsten Adressen macht die CPU aber von ganz allein. In einem echten 32bit-System ist der Arbeitsspeicher außerdem so organisiert, dass vier aufeinanderfolgende Adressen gleichzeitig gelesen oder geschrieben werden können.

        Sind es bei einem 64bit-System wirklich pro Adresse 64 bit Wordbreite?
        _Diese_ 64 Bit, also die, von denen zur Zeit in der Werbung meist die Rede ist, beziehen sich auf die Adresse, nicht auf die Daten.

        Falsch. Es geht normalerweise um die Daten-Wortbreite. Eine 32bit-CPU hat 32bit breite Datenregister und einen 32bit breiten Datenbus, kann also 32bit in einer einzigen Aktion verarbeiten. Die Anzahl der Adressbits ist wieder eine andere Geschichte: Die gute alte 80286-CPU war ein 32bit-Prozessor (konnte 32bit auf einmal bearbeiten oder transferieren), hatte aber nur 24 Adressbits (konnte also bis zu 16MB Speicher adressieren).

        Und waren es bei den 8-bittern tatsächlich 16 bit?

        Nein, 8bit.

        Schaut man ganz genau hin, gibt es auch Prozessoren, die intern größere Wortbreiten haben als sich extern anschließen lässt, schlichtweg um die Verdrahtung günstiger zu machen.

        Zum Beispiel die 386SX, eine 32bit-CPU mit internem 32bit-Adressbus, der aber nur 16bit breit herausgeführt war. Die Adresse wurde dann immer in zwei Häppchen nach außen übermittelt, was bei jedem Speicherzugriff einen Taktzuklus länger dauerte als beim "richtigen" 386er.

        So long,
         Martin

        --
        Die junge Ehefrau weint sich bei ihrer Mutter aus:
        Er hat gesagt, ich soll mich zum Teufel scheren! - Und da kommst du ausgerechnet zu mir?!
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Guten Abend.

          Sind es bei einem 64bit-System wirklich pro Adresse 64 bit Wordbreite?
          _Diese_ 64 Bit, also die, von denen zur Zeit in der Werbung meist die Rede ist, beziehen sich auf die Adresse, nicht auf die Daten.

          Falsch. Es geht normalerweise um die Daten-Wortbreite.

          Ohne da jetzt drauf rumreiten zu wollen, aber bei "_diesen_ 64 Bit", denen aus der "Werbung", die ich ansprach, da geht es um den Adressbus. "Windows 7 64" hat die 64 nicht angeklemmt, weil es 64-Bit-Daten verarbeiten kann, sondern weil es ohne Klimmzüge Speicher jenseits 4 GByte adressieren kann – und 4 GByte sind das Maximum, das mit 32 Bit breiten Adressen angesprochen werden kann.

          Und waren es bei den 8-bittern tatsächlich 16 bit?

          Nein, 8bit.

          Der C64 als Beispiel und Klassiker der 8-Bit-Ära konnte 16 Bit breite Adressen ansprechen (etwas verquer zwar, aber unterm Strich 16 Bit). Das ist auch offensichtlich, denn mit 8-Bit-Adressen lassen sich keine 64 KByte ansprechen.

          Nur von "n Bit" zu sprechen und wegzulassen, wen man denn nun genau meint, Adressen oder Daten, sollte man also tunlichst vermeiden.

          1. Hallo,

            Es geht normalerweise um die Daten-Wortbreite.
            Ohne da jetzt drauf rumreiten zu wollen, aber bei "_diesen_ 64 Bit", denen aus der "Werbung", die ich ansprach, da geht es um den Adressbus.

            ich glaube, da liegt ein Missverständnis vor.

            "Windows 7 64" hat die 64 nicht angeklemmt, weil es 64-Bit-Daten verarbeiten kann

            Doch, genau darum.

            sondern weil es ohne Klimmzüge Speicher jenseits 4 GByte adressieren kann – und 4 GByte sind das Maximum, das mit 32 Bit breiten Adressen angesprochen werden kann.

            Der im Vergleich zu den 32bit-CPUs erweiterte Adressbus und Adressraum ist ein zusätzliches Bonbon, das natürlich gern genommen wird. Es ist aber nicht das, weswegen man von einer 64bit-Architektur spricht. Ich finde spontan keine Quelle, aber ich meine, dass der Adressraum der aktuellen 64bit-CPU wengier als 2⁶⁴ beträgt. Ich meine, ich hätte mal von 2⁴⁸ gelesen, bin aber nicht sicher. Das wären ja immerhin auch schon 256TB.

            Und waren es bei den 8-bittern tatsächlich 16 bit?
            Nein, 8bit.
            Der C64 als Beispiel und Klassiker der 8-Bit-Ära konnte 16 Bit breite Adressen ansprechen (etwas verquer zwar, aber unterm Strich 16 Bit). Das ist auch offensichtlich, denn mit 8-Bit-Adressen lassen sich keine 64 KByte ansprechen.

            Tatsächlich wird die 6502-Familie als klassischer Vertreter der 8bit-CPUs betrachtet. Ja, 8bit Datenbusbreite. Der Adressbus war bei diesen CPUs volle 16bit breit, sie konnten 64k ohne Umschweife direkt adressieren - da war nix verquer.

            Nur von "n Bit" zu sprechen und wegzulassen, wen man denn nun genau meint, Adressen oder Daten, sollte man also tunlichst vermeiden.

            Es ist schöner, wenn man es konkret angibt; wenn nicht, ist es aber implizit immer die Daten-Wortbreite. Danach werden CPUs und CPU-Architekturen klassifiziert.

            Ciao,
             Martin

            --
            Niemand lebt allein von seinen Träumen.
            Aber wer träumt, lebt noch.
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
            1. Hi Martin,

              also braucht ein 64-bit-System auch nicht doppelt soviel RAM, wie ich letztens mal von einem Menschen gehört habe. Das kam mir sowieso etwas spanisch vor.

  3. Etwas Licht ins Dunkel des Dummis bitte

    http://de.wikipedia.org/wiki/64-Bit-Architektur

    http://de.wikipedia.org/wiki/64-Bit

    http://de.wikipedia.org/wiki/32-Bit-Architektur

    http://de.wikipedia.org/wiki/32-Bit