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
57
58
59
60
61
62
63
64
65
66
67
|
{ %CPU=i386 }
{ Source provided for Free Pascal Bug Report 1327 }
{ Submitted by "Fernando Oscar Schmitt" on 2001-01-08 }
{ e-mail: pulp@cpovo.net }
{NOT to execute! ONLY for disassemble!}
{$asmmode intel}
procedure NotToExecute;
begin
asm
lea eax,[ebx+1*ecx]
mov ebx,[ecx+eax*2]
add ecx,[4*eax+ebx]
sub edx,[esi*8+edi]
adc eax,[ebx+1*ecx+100000]
sbb ebx,[ecx+eax*2+200000]
movzx ecx,byte ptr [4*eax+ebx+400000]
movsx edx,word ptr [esi*8+edi+800000]
and [2*ecx],eax
xor [edx*4],ebx
or [2*ecx+20],eax
not dword ptr [edx*4+40]
end;
end;
const
has_error : boolean = false;
procedure test;
var
x,y : array[0..5] of longint;
i : longint;
begin
for i:=0 to 5 do
begin
x[i]:=6*i;
y[i]:=5*i;
end;
asm
lea edi,x
lea esi,y
mov ecx,0
@LLloop:
mov ebx,[edi+4*ecx]
sub ebx,[4*ecx+esi]
mov [edi+4*ecx],ebx
inc ecx
cmp ecx,6
jne @LLloop
end;
for i:=0 to 5 do
if x[i]<>i then
has_error:=true;
end;
begin
test;
if has_error then
begin
Writeln('bug 1327 is not fixed');
Halt(1);
end;
end.
|