Hi! Ich wollt mal fragen, ob mir jemand sagen kann, was eigentlich die Adresse a:b ist. Wiso haisst das a:b und was bedeuted das a und was das b. ? Für eine adressierung würde doch eine einzige adresse reichen. MfG Joachim
Segment:Adresse Ist zur kompatibilität zu alten CPUs so gemacht. Das Segment hat immer 16Byte Schritte und die Adresse 1Byte Schritte.
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.
>Glücklicherweise wird so ein Murks sonst nirgends angewendet.
C166 ?
Ist sogar eher noch schlimmer =)
Argh! Der segmentiert auch? Igittigitt. Würd' ich noch nicht mal mit 'ner PLCC-Zange anfassen. Spei.
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 ?
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.
@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.
@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.
@Thomas Das war nur ein Beispiel. War leichter zu rechnen und hatte grad kein taschenrechner neben mir liegen und dem von windows vertraue ich nicht ;)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.