@Hador, ich kenn mich nicht so aus mit Assembler.
Deswegen tüttel ich's mal nach Delphi, mit kleinen Änderungen um.
Delphi-Quellcode:
function Neg(EAX: Integer): Integer;
var
EDX, ECX: integer;
label
DUMDIDUM,
WUPPDI, DIDUMDI;
begin
EDX := EAX;
// MOV EDX, EAX
EDX :=
not EDX + 1;
// NEG EDX
if EDX >= EAX
then // CMP EDX, EAX
goto DUMDIDUM;
// JAE @DUMDIDUM
EAX :=
not EAX + 1;
// NEG EAX
DUMDIDUM:
// @DUMDIDUM:
EDX := EAX;
// MOV EDX, EAX
INC(EAX);
// INC EAX
WUPPDI:
// @WUPPDI:
DEC(EAX);
// DEC EAX
ECX := EAX;
// MOV ECX, EAX
ECX :=
not ECX + 1;
// NEG ECX
if ECX = EDX
then // CMP ECX, EDX
goto WUPPDI;
// JNE @WUPPDI
DIDUMDI:
// @DIDUMDI:
Result := EDX;
// NOPpen tun wir heute nich, nich ?
end;
Oder einfavh so:
Delphi-Quellcode:
function Neg(ToNegativateValue: Integer): Integer;
begin
Result := not ToNegativateValue + 1;
end;