Hallo, habe folgendes Problem. Ich möchte (in C, DOS-Programmierung) überprüfen ob ein bestimmter Speicher existiert. Dazu will ich in die Speicheradressen 0x40000, 0x80000 und 0xFFFFF etwas hineinschreiben und dann wieder herauslesen um dann durch den Vergleich herauszufinden ob der Speicher existiert. Nun wäre dies kein Problem, wenn ich das Segment und den Offset der Speicheradressen kennen würde. Ich könnte mit MK_FP einen Far-Pointer erzeugen und die Speicherstellen abtesten. Meine Frage ist nun, wie man aus den von mir genannten Speicheradressen den Segmentanteil und den Offsetanteil "herausrechnen" kann. Offensichtlich kann es sich ja nicht um 0004:0000, 0008:0000 und 000F:FFFF handeln. Vielen Dank!
Im Realmode --und um den geht es ja wohl-- sind Segment und Offset um vier Bit verschoben. Addr = ABCDE A = Segment, Bit 15..12 B = Summe aus Segment, Bit 11..8 und Offset, Bit 15..12 C = Summe aus Segment, Bit 7..4 und Offset, Bit 11..8 D = Summe aus Segment, Bit 3..0 und Offset, Bit 7..4 E = Offset, Bit 3..0 Am einfachsten ist die Chose, wenn man normierte Adressen verwendet, bei diesen beträgt der Offset maximal 0xF. 0x40000 = 4000:0000 0xFFFFF = FFFF:000F Hier mal ein paar Beispiele für nichtnormierte, aber identische Adressen: = F000:FFFF = FF00:0FFF = FFF0:00FF
Hallo, danke erst einmal für die rasche Antwort. Die von mir genannten Adressen sind ja recht trivial aufgebaut. Wie sieht es bspw. mit 0xB07C2 aus? B000:07C2 wäre doch hier nicht korrekt, oder? Mir fehlt so ein wenig die Methode um die Anteile auszurechnen. Danke!
Physikalische Adresse = Segment * 16(dezimal) + Offset Wo ist das Problem?
> Wie sieht es bspw. mit 0xB07C2 aus? > B000:07C2 wäre doch hier nicht korrekt, oder? Doch, ist es. Genauso wie B07C:0002 und B070:00C2 oder B050:02C2.
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.