blob: ebcd6f98bb33ee6f06acf24bb4a8b2aa4bea06ab (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
{ %cpu=i386 }
{$APPTYPE CONSOLE}
{$ifdef fpc}
{$mode delphi}
{$endif}
program AsmDifference;
type
TnxInt64 = Int64; {64-bit signed Integer}
TnxValueRelationship = -1..1;
const
nxSmallerThan = Low(TnxValueRelationship);
nxEqual = 0;
nxGreaterThan = High(TnxValueRelationship);
function nxCmpI64(const a, b : TnxInt64) : TnxValueRelationship;
//begin
// if a = b then
// Result := nxEqual
// else if a < b then
// Result := nxSmallerThan
// else
// Result := nxGreaterThan;
//end;
asm
xor eax, eax
mov edx, [ebp+20]
cmp edx, [ebp+12]
jg @@GT
jl @@LT
mov edx, [ebp+16]
cmp edx, [ebp+8]
ja @@GT
je @@EQ
@@LT:
dec eax
dec eax
@@GT:
inc eax
@@EQ:
end;
var
a, b: TnxInt64;
begin
a := 12884901889;
b := 12884901890;
if nxCmpI64(a, b)<>-1 then
halt(1);
writeln('ok');
end.
|