nicht ganz, wobei dieses Bit schon richtig ist, aber die negativen Werte sind noch um 1 verschoben. ( die 0 braucht man ja nicht doppelt, da -0 = +0 )
wenn X negativ,
dann X negieren oder
X := X xor -1 {$FFFFFFFF}
.
oder so wie Delphi es delphi macht
Delphi-Quellcode:
//mov EAX, X
cdq
xor EAX, EDX { wenn X negativ, dann ist EDX = -1, }
{ ansonsten ist es 0 und es würde nix passieren }
sub EAX, EDX { wenn X negativ, dann -(-1) aka +1, ansonsten -0 aka nichts }
//mov X, EAX
Da sollte man nur beachten, daß man hierfür ein freies EDX benötigt und der Wert in EAX liegen muß,
ansontens kommt man wohl nicht um die
ASM-Variante des IF-Konstrukts nicht herum.
[add]
das vergessene SUB eingefügt