AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Overflow

Ein Thema von DelphiFreund · begonnen am 10. Dez 2004 · letzter Beitrag vom 12. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
DelphiFreund

Registriert seit: 29. Jul 2004
Ort: München
127 Beiträge
 
Delphi 7 Enterprise
 
#1

Problem mit Overflow

  Alt 10. Dez 2004, 22:16
Hi,
ich weiss, dass das eine dumme Formulierung ist, aber mir ist nichts besseres eingefallen. Zum Problem: Wenn nun Byte1:= 180 und Byte2:= 90, und wenn ich diese addiere kommt glaub ich 15 raus, es gibt also einen Überlauf, kann ich irgendwie überprüfen ob es einen Overflow gibt oder bei der letzten Operation gab? Das würde alles wesentlich vereinfachen, bei Additionen. Vielen Dank für jede Resonanz.


Gruß DelphiFreund
Sandro
Irren ist menschlich...
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: Problem mit Overflow

  Alt 10. Dez 2004, 22:19
Du kannst irgendwo in den Tiefen des Compilers eine "Exeption bei Überlauf" bzw. "Überlaufprüfung" aktivieren ...
  Mit Zitat antworten Zitat
DelphiFreund

Registriert seit: 29. Jul 2004
Ort: München
127 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Problem mit Overflow

  Alt 10. Dez 2004, 22:20
Klingt gut, ich mach mich auf die Suche.


Wer sucht wird fündig : Hier die direktiven: {$OVERFLOWCHECKS ON} oder {$OVERFLOWCHECKS OFF}
Sandro
Irren ist menschlich...
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#4

Re: Problem mit Overflow

  Alt 10. Dez 2004, 22:29
Sonst:

Compilerbefehl:{$Q+}
  Mit Zitat antworten Zitat
Puhbaehr
(Gast)

n/a Beiträge
 
#5

Re: Problem mit Overflow

  Alt 11. Aug 2006, 17:16
Und gleiches per Code abfangen/abfragen?

Pseudocode:
Code:
var Zahl : Byte;
...
Zahl := 200;
inc (Zahl, 100);
if (überlauf) then ...
Ich hab versucht mit dem Carry-Flag zu experimentieren.
Asm-Pseudocode:
Code:
function Carry : boolean; Register;
 asm
  push EAX

  jc @@C      // jump if carry
  jmp @@NC

  @@C:        // carry
  mov AL, 1
  jmp @@end

  @@NC:       // no-carry
  mov AL, 0

  @@end:
  mov Result, AL // mov Result

  pop EAX
 end;

...

Zahl := 200;
inc (Zahl, 100);
if (Carry) then ...
Funktioniert im genannten Beispiel. Funktioniert aber nicht nach z.B. GetFileSize
Reicht das Carry-Flag um auf einen Überlauf zu prüfen?
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: Problem mit Overflow

  Alt 11. Aug 2006, 17:18
Dafür gibt es das Overflow Flag.

Mach den Compilerschalter an und rechne es in Delphi innerhalb eines Try/Except Blockes. Wenn es eine EOverflow Exception gibt, dann ist ein Überlauf aufgetreten.
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#7

Re: Problem mit Overflow

  Alt 11. Aug 2006, 18:08
Delphi-Quellcode:
function Carry : boolean;
asm
  db 0d6h
end;
  Mit Zitat antworten Zitat
Puhbaehr
(Gast)

n/a Beiträge
 
#8

Re: Problem mit Overflow

  Alt 11. Aug 2006, 18:40
Über einen try/except-Block wollte ich es nicht machen sondern über eine einfache Funktion.

Brechis Beispiel funktioniert soweit. Nur was passiert hier? Meine Asm-Referenz gibt zu db nicht viel her. Und das was es hergibt ist wohl das falsche (define byte - reserviert ein Byte an Speicherplatz im Programm... Buch Assembler Ge-packt)

Vielen Dank 4 Help

Edit: Delphi zaubert aus db 0D6h db 1. Warum?
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Problem mit Overflow

  Alt 11. Aug 2006, 19:53
Hallo,

auf den korrekten Zustand des Overflow- oder Carry-Flags nach einer Addition zweier Bytes würde ich mich nicht verlassen. Die Addition wird häufig - nach einer Erweiterung der Operanden auf 32 Bit - durch eine 32-Bit-Addition oder einen LEA-Befehl durchgeführt. In diesen Fällen besitzen die genannten Flags keine Aussagekraft.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Puhbaehr
(Gast)

n/a Beiträge
 
#10

Re: Problem mit Overflow

  Alt 11. Aug 2006, 20:41
Genau das habe ich gemerkt, nachdem die Funktion GetFileSize ausgeführt wurde.
...
Wie kann ich sonst mit einer einfachen Funktion den Überlauf prüfen? Wenns geht ohne einem Try/Exception-Block.
Oder frage ich mal anders, was genau macht der Try-Except-Block bei einem Überlauf? Wie überprüft er diesen?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz