Speicheradressierung

Hallo,

bei einem 16 Bit breitem Datenspeicher werden ja Wörter anstatt Byte geschrieben. Wenn ich dann eine Ausgabe nach folgendem Muster erhalte:

Adresse Wert

0xC00000 0x0000FFFF

heißt das dann, dass die Adresse 0xC00000 den Wert FF hat, die Adresse 0xC00001 den Wert FF, die Adresse 0xC00002 den Wert 00 etc.?

Hallo Fragewurm,

bei einem 16 Bit breitem Datenspeicher werden ja Wörter
anstatt Byte geschrieben. Wenn ich dann eine Ausgabe nach
folgendem Muster erhalte:

Adresse Wert

0xC00000 0x0000FFFF

heißt das dann, dass die Adresse 0xC00000 den Wert FF hat, die
Adresse 0xC00001 den Wert FF, die Adresse 0xC00002 den Wert 00
etc.?

  1. Eigentlich hat das gar nichts mit der Busbreite zu tun.
  2. Wie das im Speicher organisiert ist, weiss man nur, wenn man die CPU kennt. (Es gibt sogar CPUs bei denen man wissen muss, wie sie gerade konfiguriert sind. [siehe Artikel]).
    http://de.wikipedia.org/wiki/Big_endian

MfG Peter(TOO)

Ich habe mich vielleicht falsch ausgedrückt.
Um die Busbreite geht es gar nicht.

Habe einen Speicherbaustein mit 4M x 16-Bit, das heißt doch er hat 4 Millionen Adressen, die jeweils 16 Bit aufnehmen können, oder anders gesagt ein Speichervolumen von 4 Millionen Wörtern, oder nicht?

Wenn ich in einer Speicherübersicht jetzt folgenden Ausdruck sehe:

0xC0000 0x0000FFFF

müßte das doch heißen, dass 0xC0000 den Wert 0x0000 enthält, und 0xC0001 den Wert 0xFFFF, da ja jede Adresse 16 Bit speichern kann.

Hallo Fragewurm,

Ich habe mich vielleicht falsch ausgedrückt.
Um die Busbreite geht es gar nicht.

Ja, hast du dich, bzw. du warst ungenau!

Habe einen Speicherbaustein mit 4M x 16-Bit, das heißt doch er
hat 4 Millionen Adressen, die jeweils 16 Bit aufnehmen können,
oder anders gesagt ein Speichervolumen von 4 Millionen
Wörtern, oder nicht?

Genau.

Wenn ich in einer Speicherübersicht jetzt folgenden Ausdruck
sehe:

0xC0000 0x0000FFFF

müßte das doch heißen, dass 0xC0000 den Wert 0x0000 enthält,
und 0xC0001 den Wert 0xFFFF, da ja jede Adresse 16 Bit
speichern kann.

Das stimmt wenn die Adresse eine WORT-Adresse ist.

Wenn man aber nichts genaueres weiss, was da ausgegeben wird, sind es einfach zwei Hexzahlen :wink:
Du solltest also schon noch angeben in welchem Kontext diese Zahlen auftreten.

Normalerweise wird Speicher in Computersystemen BYTE-weise durchgezählt. Physikalisch wird dann bei einem 16-Bit-Bus A0 nicht mit den Adressleitungen des Speichers verbunden.
A0 dient dann zusammen mit einem Signal, welches angibt ob ein Byte- oder Wort-Zugriff stattfindet dazu nur die entsprechenden 8 Bit zu beachten. Soviel zu einem 16-Bit-Bus.

MfG Peter(TOO)

Das stimmt wenn die Adresse eine WORT-Adresse ist.

Wenn man aber nichts genaueres weiss, was da ausgegeben wird,
sind es einfach zwei Hexzahlen :wink:
Du solltest also schon noch angeben in welchem Kontext diese
Zahlen auftreten.

Hallo,

die Zahlenkombi habe ich aus dem Memory View eines Debuggers für einen 32-Bit-Mikrocontroller. Steht eine Adresse nun für 8 Bit oder 16 Bit?

Gruß und Danke

Hallo Fragewurm,

die Zahlenkombi habe ich aus dem Memory View eines Debuggers
für einen 32-Bit-Mikrocontroller. Steht eine Adresse nun für 8
Bit oder 16 Bit?

Dann ist es eigentlich immer eine Byte-Adresse.

Du müsstest da schon etwas sehr exotisches haben. Im allgemeinen halten sich die Hersteller von Tools an die Vorgaben des CPU-Herstellers.

Ganz schnell sieht man es, wenn man einen Bereich anzeigt. Dein Beispiel war ja ein 32-Bit Wert.
Normalerweise gibt es die Möglichkeit sich einen ganzen Speicherbereich anzeigen zu lassen. Zudem kann man dann noch angeben ob die Werte als 8-Bit, 16-Bit oder weiss-ich-nicht-was angezeigt werden. Links steht dann meist die Speicheradresse…

MfG Peter(TOO)

Hallo,

das löst das Rätsel, wieso 32 bit angezeigt werden. Das Ganze macht eigentlich nur Sinn, wenn du einen 32bit-Prozessor hast mit 16 bit Busbreite, sonst müssten 2 Speicherchips angeschlossen sein.

Der Bus ist aber im Zusammenhang mit der Anzeige uninteressant, die richtet sich nach der Prozessor-Organisation, der Proz sieht immer 32 bit, egal ob er sie in 1, 2 oder 4 Takten aus dem Speicher lesen muss. M.a.W. angezeigt wird die Adresse des ersten Bytes und als Daten 4 Bytes, oder die Adresse des ersten 16b-Worts und als Daten 2 16b-Wörter, oder die Adresse und Daten als 32bit-Wort, das ist letzlich alles das Gleiche.

Nach der üblichen Zählweise müsste in einer fortlaufenden Anzeige die nächste Adresse um 4 höher sein, aber das könnte man auch anders betrachten, z.B. wenn der Prozessor überhaupt nicht mehr auf einzelne Bytes oder 16b-Worte zugreifen KANN. Wenn er kann, bleibt noch die Frage, ob er in den aufeinanderfolgenden Bytes zuerst die oberen oder die unteren Bits des 32bit-Worts speichert, das steht dann im Datenblatt.

(x86 können einzelne Bytes addressieren, es gibt aber auch Prozessoren, die grundsätzlich nur 32-bit transferieren. Ob man dann mit der Adresse A0 ganze 32bit-Worte anspricht oder mit der Adressbezeichnung erst bei A2 anfängt, ist Geschmackssache)

Hoffe alle Klarheiten wegdiskutiert zu haben

Gruss Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

huhu Peter
FFFF sind 4 Wörter.
Byte sind 8, Word sind 16 / f = 15 Dez = 15+0 = 16 Bits

Wenn er in der Bit Adressierung in C000 ein FFFF hat währe die nächste Adressierung C040. In einer Byte adresseriung C008 und in einer Wordadressierung nach der er hier glaub fragt C004.

Ohne den CPU Type und den Kontext stimem ich dir voll zu kann man mit den Wert sehr wenig anfangen , es könnten 1 oder zwei Zahlenwerte oder auch ein Analag -10V sein, Oder eifnach ein lehrer Bereich oder eine Sprungadresse zum Ende.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Fragewurm,

huhu Peter
FFFF sind 4 Wörter.

Hää ???
Das sind 4 Nibble, aber nur 2 Byte !!

Byte sind 8, Word sind 16 / f = 15 Dez = 15+0 = 16 Bits

Da liegst du leider falsch, bzw. das ist nur bei MicoSoft so ;-((

Byte ist eigentlich ein Begriff, welcher unter den Hobby-Computerbauern in dem 70er entstanden ist.
Der Genormte Begriff (ITU,DIN usw.) ist Octet oder Oktett für eine 8-Bit-Gruppe.
Ein Wort (Word) ist eigentlich diejenige Bitzahl, welche die CPU in einem Zugriff aus dem Speicher lesen kann und entsprach früher der Datenbus-Busbreite.

Wenn er in der Bit Adressierung in C000 ein FFFF hat währe die
nächste Adressierung C040. In einer Byte Adressierung C008 und
in einer Wordadressierung nach der er hier glaub fragt C004.

Sorry, 0x40 ist dezimal 64. Wenn, dann wäre 0xC020 richtig !

Ausser SPS, kenne ich keine Computer, welche den Speicher in dieser Form adressieren.

Ohne den CPU Type und den Kontext stimem ich dir voll zu kann
man mit den Wert sehr wenig anfangen , es könnten 1 oder zwei
Zahlenwerte oder auch ein Analag -10V sein, Oder eifnach ein
lehrer Bereich oder eine Sprungadresse zum Ende.

Wieso dann deine falschen Ergänzungen ?!?!

MfG Peter(TOO)