Adresse a:b??

Gast #136696
Lesenswert?

Diese Schreibweise gibt es beim x86-Realmode-Assembler. Die
x86-Prozessoren verwenden segmentierten Speicher, bei denen sich
Adressen aus Segment und Offset innerhalb des Segments zusammensetzen.
Segmente sind 64 kByte groß; alle 16 Bytes des physikalischen Speichers
beginnt ein neues Segment.
Mit dem Doppelpunkt werden Segment und Offset voneinander getrennt.

Die Adresse 1234:5678 (hexadezimale Notation angenommen!) verweist also
auf die physikalische Adresse 179B8 (12340 + 5678).

Glücklicherweise wird so ein Murks sonst nirgends angewendet.
Gast #136699
Lesenswert?

Das heisst ich kann über das segment 0x1234 die Adressen (vom offset
0x1234) 0 - 8 ansprechen (d.h. 0x1234 - 0x123C), bei einer
Adressbusbreite von 3 bit. Das würde bedeuten, dass ich mit der adresse
über die grenzen eines segments hinaus gehen kann.  Oder ?
Gast #136700
Lesenswert?

Ist zwar vielleicht etwas Offtopic, aber kennt jemand den C196 ?
Das ist eine Weiterentwicklung vom x86er mit 3 statt 2 Paramtern bei
jedem Befehl. Schönes Teil, nur leider finde ich dazu keinen Assembler.
Gast #136701
Lesenswert?

@Joachim: Beim x86-Realmodus sieht das etwas anders aus.

Aus zwei 16-Bit-Teilen (Segment und Offset) wird eine 20-Bit-Adresse
gebildet:

Segment:  SSSS-
Offset:   -OOOO

Die Adresse 1234:0008 ist das gleiche wie die Adresse 1200:0348
oder auch 1000:2348, die resultierende physikalische Adresse lautet
12348 (alles in hexadezimaler Notation!).

Wie das beim C166 oder '196 ist, entzieht sich - anscheinend
glücklicherweise - gänzlich meiner Kenntnis.
Mein Beileid denen, die damit was anstellen müssen.
Gast #136702
Lesenswert?

@Joachim
Adressbusbreite von 3 Bit ? Reden wir hier wir wirklich von x86'ern ?

@Rufus
Also der C166 ist wirklich eher noch hässlicher als die x86er =)
Das Teil kann einen Adressraum von 16MByte, hat aber nur 16 Bit
Register. Er kennt eine unsegmentierte Betriebsart, da wir nur mit 16
Bit Offsets gearbeitet und es steht nur ein Adressraum von 64k zur
Verfügung. Lustig wirds in der segmentierten Betriebsart:
Zunächst einmal ist der Programmzähler aufgeteilt, die unteren 16 Bit
sind im IP, die oberen 8 Bit Im CSP (Code Segment Pointer).
Das geht ja noch, richtig lustig wirds beim Zugriff auf Daten.
Der Adressbereich ist zwar für Code und Daten derselbe, Adressen für
die Daten werden aber völlig anders gebildet:
- Die unteren 16 Bit der Adresse stehen z.B. in einem Register, über
das indirekt Adressiert wird. Davon sind aber nur die Bits 0-13 Teil
der Adresse, Bits 14 und 15 Addressieren dann eines der register DPP0
bis DPP3 (Data Page Pointer). Diese Register enthalten die oberen 10
Bits für die Datenadresse.
Der C166 kennt also 256 64KB grosse Codesegmente, und 1024 16KB grosse
Datapages.
Na, wenn das nicht hässlich ist, dann weiss ich auch nicht =)


Vom C196 hab ich noch nie was gehört.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren