Quote:
Hi, gibts es zu dem Problem eine Lösung?
Ich möchte mit der Funktion ReadInteger eine Memoryadresse auslesen, diese ist jedoch nicht wie "gewöhnliche" adressen 8 stellig, sondern 9 stellig. Daher ist das Umwandeln in den von der Funktion geforderten Integer-Wert nicht möglich.
|
Lass mich dir mal die Geschichte vom Hauptspeicher, den 1 Bit Registern, und den aus diesen zusammengesetzten größeren Speicherregistern. Bzw, warum mit ein wenig wenig drüber nachdenken deine Frage sich komplett selbsterklärt.
Der Hauptspeicher deines PC's besteht aus sehr vielen kleinen Speicherbausteinen, so genannten 1 Bit Registern. Die genaue Funktionsweise dessen tut hier allerdings nichts zur Sache. 1 Bit register können aber, wie der Name schon sagt nur ein Bit speichern, also entweder 0V oder 3,3V (0 und 1) zurückgeben.
Um jetzt größere Daten wie etwa Integer zu Speichern baut man aus den Einzelnen Bits Wörter, Kombinationen aus 0..1. Diese Wörter können dann, z.B. über die Darstellung des Binär-Systems als Zahlen dargestellt werden oder mit anderen Darstellungsmethoden andere Werte repräsentieren.
Alles Dreht sich um diese Wörter. Und das erste Wichtige was du Wissen solltest ist dass diese Wörter eine feste Größe haben. Also eine feste Anzahl an Buchstaben. Will man einen Single speichern, so benötigt man ein 32 Bit Wort. Für einen Double 64bit, für einen Extended 80 bit. Solange die Größe bekannt ist, ist komplett egal was dort drinsteht, ob es jetzt eine Zahl im IEEE 754 Format oder ein 2er Kompliment ist, dem Ram ist das Komplett egal. Es sind alles nur Wörter. Als Zahl Interpretiert kann ein n-Bit Wort die Zahlen 0 bis 2^(n-1) im Binärsystem darstellen.
Im Pc werden diese Wörter allerdings nicht als komplette Zahlen behandelt, sondern jeder Buchstabe wird einzeln als Boolscher Wert gehandelt und auf diesen Werten wird dann mit Boolschen Funktionen Operiert.
Die zentrale Rolle hierbei spielt das Addierwerk, welches mit 2 Wörtern die Addition im Binärsystem ausführt. Dabei gibt es mehrere Konzepte für Addierwerke, vor allem das Parallele, das Serielle und das von Neumann addierwerk.
Sowohl das Parallele als auch das von Neumann Addierwerk benötigt n Addierbausteine um n-Stellige Wörter zu addieren. Das Parallel Addierwerk kommt zwar mit nur einem Volladierer aus, benötigt aber immer n+1 Arbeitstakte, was bei den anderen nur worst case Szenario ist, weswegen dieses nicht zum Einsatz kommt.
Langer Rede kurzer Sinn: für n-stellige Wörter braucht man einen n-elementigen Addierer.
Daher gibt es verschiedene Architekturen (z.B. 8 bit oder 32 oder 64 bit) die mit Wörtern fester länge arbeiten.
Zurück zum Hauptspeicher. Wie Oben erwähnt werden diese Wörter Buchstabe für Buchstabe in 1 Bit Registern geschrieben, welche dann einfach Einzel ausgelesen werden, und die Einzel Bits aneinander gereit so dass sich das n-Stellige Wort ergibt.
Um möglichst viele Daten zu speichern werden die Daten so zusagen in einer Tabelle gespeichert, aus einzelnen Zeilen und Spalten.
Um auf eine Jeweilige Zeile und spalte zuzugreifen werden so genannte Adressen genutzt. Adressen sind wiedermal nichts Anderes als Wörter aus L:={0, 1}, welche dann mit Boolschen Funktionen Daten aus der Tabelle lesen, und in diese schreiben zu können.
Zur Adressierung gibt es 2 wichtige Konzepte. Zum einen so, dass die Tabelle genau so viel Spalten wie Reihen hat. Bei n Spalten und n Reihen könnten dann n^2 Bits gesichert werden. Die Adresse besteht selbst aus 2 n-Bit Wörtern, die genau angeben welche Reihe und welche Spalte. Diese werden nacheinander an den Speicher übergeben, und dieser weiß dann um welche Zelle es sich handelt. Allerdings kann man damit nur auf ein Bit nach dem Anderen zugreifen.
Die nächste Option, nur eine Kleine Anzahl an Spalten, dafür eine größere Anzahl an Reihen sagen wir mal n Reihen und x Spalten. Dann wird über die Adresse nur die Reihe geliefert, und dann werden alle x Spalten aus dieser Reihe ausgegeben, und somit hat man direkt das x-Bit wort.
Warum erzähle ich das alles nun, hier kommt die Poin*te:
Wie oben schon erklärt muss das Addierwerk statisch mit einer Festen Anzahl an Addierern auf n-stellige Wörter eingestellt sein, daher gibt es die verschiedenen Architekturen z.b. 32 bit und 64 bit. So eine Architektur betrifft allerdings nicht nur das addierwerk, sondern viel mehr das Komplette system wird auf eine Architektur angepasst. Bei einem 64 bit System werden auch 64 bit Adressen verwendet, um auf 2^64 Speicheradressen die je 8 bit Wörter auslesen können, und diese dann zu größeren bzw kleineren Wörtern noch zusammenfügen können. Daher kommt auch zu Stande das 32 bit nur 4 GB Ram handeln kann (2^32 Adressen, pro Adresse 8 Bit sind c.a. 34 Bit = 4 GByte)
Zu deinem Problem:
Du sagst gewöhnliche Adressen sind 8 Stellig, also 8 Stellige Wörter im Hexadezimalsystem. das sind 8*4 stelligen Wörter im Binär system, also 32 Bit Wörter.
Wenn die Adresse 9 Stellen allerdings hat, woran könnte dass dann wohl liegen (unter Anbetracht dessen dass du wohl kaum ein 36 bit system haben wirst).