64 位 bsr asm 正在截断高 32 位

64 bit bsr asm is truncating the upper 32 bits

我希望 bsr 对 64 位数字进行操作。但是,以下仅适用于输入的低 32 位:

function BSR64(const Val: Int64): Integer;
begin
asm
  bsr           eax, [Val]   
...

我该怎么做?

我正在使用 Lazarus 在 64 位模式下进行编译。

访问64位寄存器如下:

 bsr rax, [val]

eax 是低 32 位。 ax是低16,al是低8。

使用 32 位寄存器目标意味着内存的 32 位操作数大小。 BSR 要求它们匹配,就像除 movzxmovsx.

之外的几乎所有其他指令一样