将汇编程序代码更改为Delphi

时间:2018-03-08 21:53:18

标签: assembly delphi-xe

我需要在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;

1 个答案:

答案 0 :(得分:1)

您当然可以在Windows x64 Delphi编译器上使用asm。例如

function GetRDTSC: UInt64; 
asm
  RDTSC
  SHL   RDX, 32
  OR    RAX, RDX
end;

在x64上,RDTSC指令清除RAXRDX寄存器的高32位,这是使该代码工作的原因。

请注意,我假设您使用的是一个支持RDTSC指令的足够现代的Delphi版本。否则,您可以根据问题中的代码求助DW。我们不知道您使用的是哪个版本,因为该问题存在错误。