Für 16-Bit wird der 'falsche' Opcode benutzt (eigentlich der richtige aber wg. der 32-Bit Arithmetik wird in
beiden Fällen das Overflow-Bit nicht gesetzt, also netto falscher Code)
Code:
Unit2.pas.38: a := 1000;
005CE68A 66C745FEE803 mov word ptr [ebp-$02],$03e8
Unit2.pas.39: b := 10000;
005CE690 66C745FC1027 mov word ptr [ebp-$04],$2710
Unit2.pas.40: acceptDouble(a-b);
005CE696 0FB745FE movzx eax,[ebp-$02]
005CE69A 0FB755FC movzx edx,[ebp-$04]
005CE69E 2BC2 sub eax,edx
005CE6A0 7105 jno $005ce6a7
005CE6A2 E80595E3FF call @IntOver
Da
OF nicht gesetzt ist, gibt's keinen Int-Overflow. Bei 32-Bitwird nicht
OF getestet sondern
CF, und das ist in beiden Fällen gesetzt.
Code:
Unit2.pas.44: acceptDouble(x-y); // << EIntOverflow
005CE6CA 8B45F8 mov eax,[ebp-$08]
005CE6CD 2B45F4 sub eax,[ebp-$0c]
005CE6D0 7305 jnb $005ce6d7
005CE6D2 E8D594E3FF call @IntOver