将此内联汇编程序函数转换为 Delphi Pascal

Converting this inline Assembler function to Delphi Pascal

我目前正在开发 Delphi 中的遗留产品,其中包括一些内联汇编,我需要帮助了解该函数的作用以及如何将其转换为 Pascal。

密码是:

function lswap(i : longint) : longint; assembler;
asm
{$IFDEF CPU64}
    mov eax,ecx
{$ENDIF CPU64}
    db [=11=]f,$c8  {bswap eax  !! requires at least 486 CPU!!}
end;

通过帮助您理解它的作用:

您可以使用调试器查看代码中发生的情况,包括汇编程序中的情况。

如果您有一个调用此例程的测试程序(可能多次使用不同的参数)并将结果存储在标准 Delphi 变量中,那么要进行调试,您将:

  • 在你第一次调用它的地方设置一个断点
  • 当您遇到断点时,请确保您已调试 'Full CPU' 并选择 'mixed source' 显示。

查看编译器生成的代码。编译器要做的第一件事是为您正在调用的例程准备参数。对于 Pascal 例程,这通常意味着将值放入适当的 CPU 寄存器。

逐行进入代码。在寄存器 window(完整 cpu 显示的一部分)中,您将看到寄存器的值以及它们如何随着每条指令而变化。

在例程 return 上,编译器会将结果存储在某处,以便您能够了解编译器如何解释结果。

简单地看一下输入和输出可能就足够了,而不必了解例程中的所有内容。

内联汇编器已广泛用于许多代码库,但随着越来越多的人远离固定的 x86 架构,删除此类代码的原因越来越多。