I ues this code to get system up time :
procedure GetSystemUpTime(var Hour, Minute : integer);
function GetSysTime : dword;
asm
int $2a
end;
begin
Hour := GetSysTime() div 3600000;
Minute := GetSysTime() mod 3600000 div 60000;
end;
procedure TForm1.Button1Click(Sender : TObject);
var
H, M : integer;
begin
GetSystemUpTime(H, M);
Label1.Caption := IntToStr(H) + ':' + IntToStr(M);
end;
I test it in win8 x86 and XP x86 it works , but fail in win7 x64 with error:

I wonder how to get system interruption in x64 , can anybody fix it ?
This behavior is not related to the OS processor architecture.The0x2Ainterruption gives access to the undocumented functionKiGetTickCount, but this only work until Windows XP,starting with windows vista you can use theGetTickCount64function to get the milliseconds that have elapsed since the system was started, also you can use theWin32_OperatingSystemWMI class and theLastBootUpTimeproperty.BTW, If you need measure a frame of time minor than 49.7 days, you can use the GetTickCount function.
UPDATE
It seems which the KiGetTickCount function is exposed via the interrupt 0x2A interface only on 32-bit versions of Windows.
This is the result of dump the IDT(Interrupt Descriptor Table) on x86 Windows using the Kernel Debugger.
and now in x64