delphi - Delphi XE/XE2 64位中的POPCNT

标签 delphi assembly delphi-xe basm

如何在 Delphi XE 或 XE2 下使用非常快的 Intel POPCNT 指令实现 16/32/64 位字内的 1 位计数?是否有库例程可以直接访问该指令?有人可以写一个演示汇编部分来说明其用法吗? 最后,64 位 Delphi 有哪些选项(没有可用的 asm)? 提前致谢 t

最佳答案

正如 Rob Kennedy 所建议的,这里有适用于 32 位和 64 位 Delphi IDE 的函数。

function GetBitCount(num: integer): integer;
asm
  POPCNT    eax, num
end;

function GetBitCount(num: Int64): integer;
asm
  POPCNT    rax, num
end;

编辑: 这是32位和64位Delphi兼容版本

{$IF CompilerVersion < 23} //pre-XE2
  NativeInt = integer;
{$IFEND}

function GetBitCount(num: NativeInt): integer;
asm
{$IFNDEF CPUX64}
  POPCNT    eax, num
{$ELSE CPUX64}
  POPCNT    rax, num
{$ENDIF CPUX64}
end;

关于delphi - Delphi XE/XE2 64位中的POPCNT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10798051/

相关文章:

linux - 使用汇编在 Linux 终端中清除屏幕?

python - 在 Delphi XE 中从网站的 API 获取并显示 json 数据

xml - 如何在Delphi 2009中解析此XML字符串?

Delphi 字符串和引用计数

assembly - 用 MASM 汇编语言定义带参数的函数

delphi - 使用delphi下载iphone网页

delphi - 为什么CREATE TABLE看似成功,但在DBX下却失败?

delphi - 基于泛型参数类型的类型推断(Delphi)

delphi - 在显示之前修改 DBGrid 单元格内容

assembly - 如何知道汇编代码正在使用 RAM?