Wieviele Bits können in einer RAM Adresse gespeichert werden?

Pfranzy

Kabelverknoter(in)
Ich hab da mal eine kleine Frage undzwar würde ich gerne wissen , wieviele Bits in einer einzigen RAM Adresse gespeichert werden kann.
Manchmal lese ich etwas von (fast) immer 8 Bit (Also 1 Byte) und manchmal lese ich was von 32 Bits oder 64 Bits , also wie das Betriebssystem dann es "vorgibt".

Und wenn es 8 Bits sind ,stelle ich mir eine Frage undzwar ein Befehl könnte ja ungefähr so aussehen : Speicher in Register A den Wert der an dieser Adresse steht.
Also werden in den ersten 4 Bits der Opcode gespeichert und in den nächsten 4 Bits steht dann die Adresse wo der Wert steht , der eingetragen werden soll( der Grund warum der Wert der eingetragen werden soll , in einer anderen Adresse steht und nicht in der gleichen Adresse ist weil dann "zu wenig" Platz in der Adresse noch übrig ist , um eine komplete Zahl zu speichern, oder ?). Aber was ich verstehe, warum dann die 4 Bits die die Adresse haben , wo der Wert steht , nicht zu wenig sind , weil mit 4 Bits kann man doch nur dann 16 Adressen "auswählen" und ein RAM hat ja weitaus mehr als nur 16 Adressen.

(Falls ihr euch fragt , wie ich darauf komme:
Eingebundener Inhalt
An dieser Stelle findest du externe Inhalte von Youtube. Zum Schutz deiner persönlichen Daten werden externe Einbindungen erst angezeigt, wenn du dies durch Klick auf "Alle externen Inhalte laden" bestätigst: Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit werden personenbezogene Daten an Drittplattformen übermittelt.
Für mehr Informationen besuche die Datenschutz-Seite.
)

Ich hoffe ich verstehe was ich meine.
Danke :)
 
Ist schon etwas her, dass ich mit Assembler zu tun hatte xD
Aber wenn du nur 4 Bits für den OPCode hättest würde das ja bedeuten, du hast gerade mal 16 Befehle...
der Befehlssatz dürfte bei 64 Bit CPU eben diese 64 Bit sein auch wenn aktuell wohl noch nicht ganz ausgeschöpft.
Und im Register A (oder auch Akku) werden die aktuellen Zwischenergebnisse gespeichert, das ist kein Befehls oder Adressregister.
Schau dir hierzu am besten einfach mal einen Low Tech CPU an z.B. 8080.
 
Befehle gibt es nicht annähernd 2^64. Aber (virtuelle) Speicheradressen und deren Inhalt ist natürlich nicht Bestandteil des Befehls oder der Adresse. Selbst mit der 4-Bit-Architektur im Startpost würde also ein Byte also nur dann für eine Speicheradresse und 16 Befehle ausreichen, wenn man "copy to A" als getrennten Befehl von "copy to B" integriert. Möchte man dagegen noch z.B. 4 Register adressieren, blieben nur noch zwei Bit für Befehle übrig. Das wäre dann doch sehr, sehr RISC. (Ich schlage load, store, add und compare vor, überlasse es aber anderen, ausschließlich darauf basierenden Code schreiben :-))
Erweitert man das Beispiel um Mindestbestandteile und arbeitet man mit einem 64-Bit-System, braucht man aber viel mehr Zeichen. Ich glaube für den Oppcode werden auch keine vollen 8 Byte eingeplant, aber vier müssten die x86-Befehle mittlerweile füllen. Register kann man dabei verkürzt addressieren, aber für einen Zugriff auf eine Speicheradresse werden auf unterste Ebene dann bis zu 8 Byte benötigt.

Die ursprünglich gefragte Speichergranularität müsste übrigens Hardware-seitig weiterhin bei einem Byte liegen (byte-adressable). Das hießt ein moderner Prozessor braucht 64 Bit für die Verwaltung von 8 Bit. :-D Gelesen wird bei DDR4 und 5 aber schon in 64 Byte großen Blöcken und das ist auch die gängige Cache-Line-Größe. Für die virtuelle Verwaltung des Speichers durch das Betriebssystem listet Wikipedia eine minimale Page-Größe von 4 KiB (maximal 1 GiB).
 
Zurück