Autor Thema: mit far pointer über Segment Grenzen? (C)  (Gelesen 3190 mal)

scales of justice

  • Beiträge: 228
    • Profil anzeigen
Gespeichert
« am: 04. June 2006, 14:26 »
ich hab mit Turbo C ein Programm geschrieben, in dem gibts nen far Pointer:

unsigned char far *test = (unsigned char far *)0x20000000;

also ein far pointer zu 2000:0000,
den benutz ich ganz normal als Array, zB:

test[0] = 255;

soweit funktioniert das auch

aber was wenn ich nun sowas mache:

test[65536] = 255;

da der Spaß bei 0 anfängt, ist 65536 ja genau im nächsten Segment,
bekommt Turbo C das automatisch hin und schreibt das dann einfach ins nächste Segment, oder macht der da dann murks?

mein Programm funktioniert jedenfalls nicht, muss aber nicht daran liegen

eigentlich hätte ich das einfach ausprobieren können

test[65536] = 255;
if(test[65536] == 255)
{
  //irgendwas
}


aber vielleicht gibts auch einfach nen Überlauf oder so
und das Zeug ist dann einfach an 2000:0000, statt 3000:0000

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #1 am: 04. June 2006, 15:48 »
Seit wann ist 2000:0000 20000000h? 20000h wäre richtig. Mal abgesehen davon, das ich kein C/C++ kann glaube ich nicht das der automatisch ins andere Segment hüpft. Zeigt der beim compilieren keine warnung an?

bitmaster
In the Future everyone will need OS-64!!!

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 04. June 2006, 16:17 »
bitmaster, 20000000h ist korrekt. ein far pointer auf 2000:0000h wird auch in assembler so ausgedrückt.

scales of justice: es gibt einen überlauf. test[65536] ist gleich test[0], wegen der 16bit.
Dieser Text wird unter jedem Beitrag angezeigt.

scales of justice

  • Beiträge: 228
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 04. June 2006, 18:04 »
gibts da denn nen Trick oder so, mit dem das doch geht?
oder muss ich das dann von Hand so machen, dass er das nächste Segment nimmt?

EDIT:

man muss einfach statt far Pointer huge Pointer nehmen, wusste gar nicht das es sowas gibt...

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #4 am: 04. June 2006, 18:45 »
Zitat von: PorkChicken
bitmaster, 20000000h ist korrekt. ein far pointer auf 2000:0000h wird auch in assembler so ausgedrückt.
Hmm... Dann verstehe ich nicht genau was der C Code macht. Er soll zu einer Adresse springen? Ach ja, ihr seit ja im RM, oder? Sry, hatte jetzt PM mit Deskriptor-Basis = Null im Kopf. *mist*

bitmaster
In the Future everyone will need OS-64!!!

 

Einloggen