[Anfänger] Register/Addressierung
-
Hallo!
Lerne noch an der Theorie von ASM und bin zu dumm, folgende Kernsätze zu verstehen:Mit 16 Bit können wir die Dezimalzahlen 0
bis 65535 darstellen. Wir könnten also mit einem Register 65535 Byte durchnummerieren.Satz 1 ist klar:
1111111111111111 ≈ 65535d → Diese Zahl ist die allergrößte für 16 Bit und passt in EIN Register.
Satz 2 ist mir unklar:
Das "Also" und das "Durchnummerieren" sind mir schleierhaft. Wie kommt er jetzt auf 65535 Bytes, wenn man von 65535d spricht, was ja eigentlich 16 Bits sind? Was meint der Autor mit durchnummerieren? Wie passen so viele Bytes in EINEN Register?
-
Du solltest sofort das Buch/Tutorial wechseln.
http://www.c-plusplus.net/forum/viewtopic-var-p-is-1708323.html#1708323 (Thomas Peschko)2^16 = 65536
Man kann also 65536 "Dinge" mit 16 Bit "zählen" ( = durchnummerieren ).
Der Speicher ist in einzelne Byte aufgeteilt, das jedes eine "Adresse" hat.
Mit 16 Bit kann man ein "Segment" von 65536 Byte = 64 * 1024 Byte = 64 KB adressieren.Das Abzählen geht von 0 bis 65535 (jetzt ist es eins weniger wegen der 0 am Anfang!)
In ein 16-Bit-Register (z.B. AX, BX, CX, DX) passen genau 16 Nullen oder Einsen. Diese Bits werden übrigens auch von 0 bis 15 durchgezählt.
Was also in ein Register passt sind die 16 Nullen/Einsen mit denen man dann Binärzahlen von 0 bis 65535 bilden kann, die man dann zum Auffinden (Adressieren) der Bytes im Speicher verwenden kann.
Frage: Mit 32 Bit kann man also wieviele Adressen direkt anpeilen?
Lösung: 2^32 = 4294967296 Byte = 4 * 1024 * 1024 * 1024 Byte = 4 GigaByte (GB)
-
> 2^16 = 65536
Naja, kommt ja auf das selbe raus,
1111111111111111 = 2^16 = 65536 = ∑1*2^i Mit i = 0 bis 15.Aber jetzt habe ich es geschnallt, habe nich geahnt, dass eine Adresse genau 1 Byte zugewiesen ist. Danke!
> Du solltest sofort das Buch/Tutorial wechseln.
Wieso? Ich lerne ja mit seinem Tutorial
-
-
Erhard Henkes schrieb:
Frage: Mit 32 Bit kann man also wieviele Adressen direkt anpeilen?
Lösung: 2^32 = 4294967296 Byte = 4 * 1024 * 1024 * 1024 Byte = 4 GigaByte (GB)Hui, jetzt hab ich mir das erste mal Gedanken gemacht
64bit = 18446744073709551616 also ... 16384 Petabyte? Hui, glaube bis zu den 128bit Prozessoren dauert es nocht
-
was spricht eig dagegen, den RAM ebenfalls zu clustern?
also wie bei Festplatten eben...
praktisch, dass man 2 32-Bit register verwendet für die Addressverwaltung.
dann hätte man auch auf 32-Bit Rechnern 64-Bit-Adressen...
-
was spricht eig dagegen, den RAM ebenfalls zu clustern?
Zeitverlust durch mehrfache Indirektion über Tabellen und Linked List.
Deskriptorentabellen (GDT) und Paging sind doch schon Overhead genug.
Speicher ist heute der Geschwindigkeitsengpass.