Einzelnen Beitrag anzeigen

Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#14

Re: Integerüberlauf bei Cardinalmultiplikation?

  Alt 26. Sep 2005, 16:55
Bei mir klappts mit D2005, sowohl mit als auch ohne Überlaufprüfung.

Hab' gerade mal ein bisschen Disassembliert und dabei gesehen, dass Delphi je nach Einstellung eine der Instruktionen imul (ohne Überlaufprüfung) oder mul (mit Überlaufprüfung) erzeugt.

Code:
  ; Mit Prüfung            ; Ohne Prüfung
  mov ecx,$3b9aca00         mov eax,$3b9aca00       
  mov ebx,$00000004         mov edx,$00000004
  mov eax,ebx              imul edx
  mul ecx
  jnb @cont
  call @IntOver
@cont:
Vielleicht kann das einer mit 'ner anderen Delphi-Version mal nachvollziehen?

Also: Breakpoint auf die Multiplikation und wenn Delphi hält dann Ansicht -> Debug Fenster -> CPU.

Vielleicht erzeugen andere Delphi-Versionen bei Optimierung und Überlaufprüfung die falsche CPU-Instruktion - imul setzt nämlich das Carry-Flag, das bei "jnb @cont" überprüft wird, mul hingegen nicht.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat