Einzelnen Beitrag anzeigen

gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#10

Re: Überlauf bei Berechnung erkennen

  Alt 23. Mai 2008, 17:23
Es muß ja nicht alles in ASM sein. Vielleicht nur für das werthöchste DWORD. Ich verwende zB folgende Funktion (die man notfalls noch optiomieren kann):

Delphi-Quellcode:
{---------------------------------------------------------------------------}
function add32_ovr(x,y: longint; var z: longint): boolean;
  {-add z=x+y with overflow detection}
var
  overflow: boolean;
begin
  asm
            sub edx,edx
            mov eax,[x]
            add eax,[y]
            jno @@1
            inc edx
    @@1: mov [overflow],dl
            mov edx,[z]
            mov [edx],eax
  end;
  add32_ovr := overflow;
end;
Zum Carry: Bei Addition sollten nur 0 oder 1 auf treten, bei Subtraktion 0 oder -1. Wenn -1 bei Addition auftaucht, ist irgendwo der Wurm drin.

Gruß Gammatester
  Mit Zitat antworten Zitat