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