Hi Manuel!
Der
ASM-Code ist die 1:1-Übersetzung deines Delphi-Codes. 'cdq' ist die vorzeichenrichtige Erweiterung von EAX auf 64 Bit (in EDX:EAX). Nach dem 'cdq' steht also in EDX entweder eine 0 (bei positiven Zahlen) oder eine -1 (bei negativen Zahlen). Bei positiven Zahlen verändern 'xor' und 'sub' somit den Inhalt von EAX nicht, bei negativen Zahlen entspricht 'xor' dem 'not', das 'sub' subtrahiert -1 (addiert also +1). Das ganze ohne Sprungbefehle, welche den Prozessor u. U. ausbremsen könnten.
Das 'do' war wohl nur ein Schreibfehler...
Gruß Hawkeye