我需要在64Bist中编译一个32Bist的应用程序,但根据我所读的,我不能在64Bist中使用ASM代码,我必须用Pascal Puro替换它。
你可以帮我指导一下,我对ASM一无所知!
asm
dw 310Fh // rdtsc
mov TimerLo, eax
mov TimerHi, edx
end;
Sleep(DelayTime);
asm
dw 310Fh // rdtsc
sub eax, TimerLo
sbb edx, TimerHi
mov TimerLo, eax
mov TimerHi, edx
end;
答案 0 :(得分:1)
您当然可以在Windows x64 Delphi编译器上使用asm。例如
function GetRDTSC: UInt64;
asm
RDTSC
SHL RDX, 32
OR RAX, RDX
end;
在x64上,RDTSC
指令清除RAX
和RDX
寄存器的高32位,这是使该代码工作的原因。
请注意,我假设您使用的是一个支持RDTSC
指令的足够现代的Delphi版本。否则,您可以根据问题中的代码求助DW
。我们不知道您使用的是哪个版本,因为该问题存在错误。