iskander писал(а):Наверно нужен хоть какой-то компилируемый кусочек кода.
Выше как раз и есть уже скомпилированный кусок кода. так фрс интерпретирует вообще в любом месте именно эту, с другими все нормально, команду косвенной адресации...
К примеру...
Код: Выделить всё
program project1; //x32
{$mode objfpc}{$H+}
uses {$IFDEF UNIX}
cthreads, {$ENDIF}
Classes { you can add units after this };
procedure Norm(Len: PtrUint; var P1, P2); assembler; nostackframe;
asm
MOVD XMM0, [P1+EAX*4]
MOVD [P2+EAX*4],XMM0
end;
procedure BAD(Len: PtrUint; var P1, P2); assembler; nostackframe;
asm
MOVD XMM0, [P1+LEN*4]
MOVD [P2+Len*4],XMM0
end;
type
AR = packed array [0..7] of byte;
var
Data1: AR = (1, 1, 1, 1, 1, 1, 1, 1);
Data2: AR = (2, 2, 2, 2, 2, 2, 2, 2);
i: byte;
begin
NORM(1, Data1, Data2);
for i := 0 to 7 do Write(Data2[i]);
BAD(1, Data1, Data2);
for i := 0 to 7 do Write(Data2[i]);
readln;
end.