А так:
Код: Выделить всё
procedure Time1(var a:Int64); assembler; register;
{$ASMMODE intel}
asm
mov ecx,a
rdtsc
mov [ecx],eax
mov [ecx+4],edx
end;
function RDTSC: Int64; register;
begin
{$ASMMODE intel}
asm
rdtsc
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var a:Int64;
begin
a:=0;
Time1(a);
Caption:=IntToStr(a);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Caption:=IntToStr(RDTSC);
end;
У меня вроде работает.. но на старом декабарьском лазарусе...
Кстати в догонку тоже спрошу... везде пишут что:
RDTSC (Read Time-Stamp Counter, opcode: 0F 31). При выполнении этой инструкции 64-битная величина TSC, соответствующая текущему состоянию счетчика, помещается в два 32-битных регистра EDX:EAX (EDX содержит биты старшего разряда TSC)
тогда почему мы пишем так:
Код: Выделить всё
procedure Time1(var a:Int64); assembler; register;
{$ASMMODE intel}
asm
mov ecx,a
rdtsc
mov [ecx],eax
mov [ecx+4],edx
end;
ведь [ecx] - содержит указатель на начало 64 битного числа тобишь, на старшие 64..33 бита? а [ecx+4] на оставшиеся младшие 32...1 биты.. ? или нет?
Т.е должны были писать так:
Код: Выделить всё
procedure Time1(var a:Int64); assembler; register;
{$ASMMODE intel}
asm
mov ecx,a
rdtsc
mov [ecx],eDx
mov [ecx+4],eAx
end;