Wieso sind Pointer vorzeichenbehaftet?
Verfasst: 24.12.2011 17:37
Frohe Weihnachten,
ich bin gerade etwas verwirrt (vermutlich, weil ich mich heute mit sowas nicht befassen sollte^^):
Weiso haben eigentlich Pointer auch ein Vorzeichen.
Negative Adresse gibt es nicht, und auch wenn intern die auch bei $90909090 (unter 32Bit) die richtige Adresse angesprungen wird, so gibt es in PureBasic ein Problem, wenn man es mit der Adresse $70707070 vergleichen würde.
Ich bin darauf gestoßen, weil ich eigentlich eine Schleife machen wollte der Art:
Wenn nun aber die höhere Adresse über $7FFFFFFF liegt, wird diese negativ, und die Schleife fängt garnicht erst an.
Nachdem ich in den ASM-Code geguckt habe, sehe ich das beim If in beiden Fällen mit JGE (Greater or Equal) rausgesprungen wird, obwohl ich gedacht hätte das man bei Pointern dann JAE (Above or Equal) benutzt.
Bedeutet das jetzt, das so manche Codes nicht mehr funktionieren würden, wenn die Speicheradresse wirklich mal über den 2GiB liegen würde?
ich bin gerade etwas verwirrt (vermutlich, weil ich mich heute mit sowas nicht befassen sollte^^):
Weiso haben eigentlich Pointer auch ein Vorzeichen.
Negative Adresse gibt es nicht, und auch wenn intern die auch bei $90909090 (unter 32Bit) die richtige Adresse angesprungen wird, so gibt es in PureBasic ein Problem, wenn man es mit der Adresse $70707070 vergleichen würde.
Code: Alles auswählen
Procedure Test(*A, *B, C.l, D.l)
If *A < *B
Debug "Pointer, Schlecht"
EndIf
If C < D
Debug "Long, OK"
EndIf
EndProcedure
Test($90909090, $70707070, $90909090, $70707070)
Code: Alles auswählen
While *Tiefer < *Hoeher
PokeL(*Tiefer, 0)
*Tiefer + 4
Wend
Nachdem ich in den ASM-Code geguckt habe, sehe ich das beim If in beiden Fällen mit JGE (Greater or Equal) rausgesprungen wird, obwohl ich gedacht hätte das man bei Pointern dann JAE (Above or Equal) benutzt.
Bedeutet das jetzt, das so manche Codes nicht mehr funktionieren würden, wenn die Speicheradresse wirklich mal über den 2GiB liegen würde?