Seite 1 von 1

Bug mit PeekQ() in If - Bedingung ?

Verfasst: 12.09.2006 00:31
von Lupo
Ich glaube ich habe einen Bug gefunden :) :)

Wenn man den Speicher mit PeekQ ausliest, dann ist eine erfolgreiche
If-Bedingung abhängig, ob man PeekQ vor oder nach das = setzt :wink:

Code: Alles auswählen


zahl.q
zahl = 66
offset.l = 0

*buffer.l = AllocateMemory(16)

PokeQ(*buffer, zahl)

Debug PeekQ(*buffer)

; OK 
If PeekQ(*buffer) = zahl
  Debug "OK"
Else
  Debug "WRONG"
EndIf

; OK
If  zahl = PeekQ(*buffer)
  Debug "OK"
Else
  Debug "WRONG"
EndIf

;OK
If PeekQ(*buffer + offset) = zahl
  Debug "OK"
Else
  Debug "WRONG"
EndIf

; NOT OK !!!!
If zahl = PeekQ(*buffer + offset)
  Debug "OK"
Else
  Debug "WRONG"
EndIf

FreeMemory(*buffer)
Vergleicht man ohne Addition im Argument von PeekQ ist alles
ok, wenn man aber ein offset dazuaddiert (hier ist es 0) dann funktioniert
der Vergleich nicht, wenn PeekQ auf der rechten Seite steht :cry:

Mit Longs ist alles ok. Ich hab extra die neueste Version von PB4.0
runtergeladen, aber da gehts auch nicht.

Kann das wer bestätigen und bitte auch weitermelden? Ich bin im
englischen Forum nicht angemeldet und mein Englisch ist /:-> /:->

Danke LUPO

Verfasst: 12.09.2006 11:02
von mk-soft
Bug bestätigt.

Verfasst: 12.09.2006 17:05
von Helle
Ist definitiv ein Bug: (ASM-Auszug)

Code: Alles auswählen

; NOT OK !!!! 
; If zahl = PeekQ(*buffer + offset) 
  MOV    ebx,dword [v_zahl]
  MOV    edi,dword [v_zahl+4]      ;hier oder für Zeiger muss anderes (freies!) Register verwendet werden. Oder pushen und nach call... wieder poppen
  MOV    edi,dword [p_buffer]      ;überschreibt 2.DWord von zahl
  ADD    edi,dword [v_offset]
  PUSH   edi
  CALL  _PB_PeekQ@4
QuadCompare3:
  CMP    ebx,eax
  JNE   .Cancel
  CMP    edi,edx          ;vergleicht jetzt Zeiger-Wert mit Daten-Wert
  JE    .Ok                  ;wäre jetzt Zufall
.Cancel:
  XOR    eax,eax
  JMP   .End
.Ok:
  MOV    eax,1
.End:
  OR     eax,eax
  JE    _EndIf11
; Debug "OK" 
; Else 
  JMP   _EndIf10
_EndIf11:
; Debug "WRONG" 
; EndIf 
_EndIf10:
Das zweite DWord von zahl wird mit Zeiger überschrieben.

Gruss
Helle