Software > Coding
Hilfe bei PureC printf und Adressberechnung
guest522:
--- Zitat von: simonsunnyboy am Fr 06.04.2012, 18:52:08 ---Ich behaupte, wenn Du einfach sagst was Du genau ansprechen willst, dann gibt es bestimmt eine elegantere Lösung, die auch eindeutig zu verstehen ist.
--- Ende Zitat ---
Ich dachte das wäre klar. ???
Das Verhalten der Ergebnise der 3 Anweisungen (vor allem die dritte) im ersten Posting erklären.
Und nochmal....es geht mir nicht um eine "elegantere Lösung", sondern darum es zu verstehen. ;)
m0n0:
Hallo,
ich kenne das Problem mit PureC.... ich mache dann immer mehrere explizite casts bei der Rechenoperation:
((long)(long) bla + (long) bla2))
dann geht's ;)
guest522:
--- Zitat von: m0n0 am Sa 07.04.2012, 18:06:26 ---Hallo,
ich kenne das Problem mit PureC.... ich mache dann immer mehrere explizite casts bei der Rechenoperation:
((long)(long) bla + (long) bla2))
dann geht's ;)
--- Ende Zitat ---
Ja so sichere ich mich auch immer ab, trotzdem würd ich gern wissen wie es zum shift im Beispiel oben kommt. Das lässt mir keine Ruhe. ;)
nichtsnutz:
Hallo Idek,
--- Zitat ---(ULONG *)(0xfedc8000L) + (long)(0x03c8-0x8000) ==> fede8f20
das versteh ich überhaupt nicht mehr:
FEDC 8000
+ 0000 83C8
-----------
FEDE 8F20
das kann nur sein, wenn vor der Addition der 2. Operand um ein Byte nach links geschoben wird:
--- Ende Zitat ---
Nicht um ein Byte sondern um 2 Bits.
Du addierst zu einem (ULONG *) also einen Zeiger auf Zahlen die 4 Bytes belegen eine Konstante,nämlich das (long)(0x03c8-0x8000) = 0x000083C8.Zeiger Arithmetik funktionirt so,dass die Konstante mit sizeof(ULONG)=4 multipliziert wird bevor sie zum Zeiger addiert wird.
Ich hoffe das ist verständlich !
Viele Gruesse,
Vassilis
P.S:Wenn ich das richtig verstehe besitzt du die Rechte und den kompletten Quellcode der NOVA Treiber !? und/oder NVDI !?
Viele Grüsse,
Vassilis
guest522:
Hi,
danke für die Erklärung! :D
Natürlich 2 bit...ich seh den Wald vor Bäumen wohl nicht mehr...sorry!
Die Rechte habe ich nicht, den Quellcode darf ich aber verwenden um Änderungen durchzuführen. Das habe ich damals versucht um die Nova mit der CT60 kompatibel zu machen. Leider steht dem die CT60 Hardware im Wege.
Von NVDI habe ich nichts.
Noch ne Frage: Du schreibst
--- Zitat ---Du addierst zu einem (ULONG *) also einen Zeiger auf Zahlen die 4 Bytes belegen eine Konstante,nämlich das (long)(0x03c8-0x8000) = 0x000083C8.Zeiger Arithmetik funktionirt so,dass die Konstante mit sizeof(ULONG)=4 multipliziert wird bevor sie zum Zeiger addiert wird.
--- Ende Zitat ---
Warum passiert das bzw., wenn ich auf einen Zeiger auf 2 Byte addiere, wird dann mit 2 multipliziert? Also
--- Code: ---(UWORD *)(0xfedc8000L) + (long)(0x03c8-0x8000) ==> fedd8790
--- Ende Code ---
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln