64位bsr asm正在截断高32位

问题描述 投票:1回答:1

我希望bsr在64位数字上运行。但是,以下内容仅适用于输入的低32位:

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

我该怎么做?

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

assembly x86-64 lazarus freepascal
1个回答
1
投票

如下访问64位寄存器:

 bsr rax, [val]

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

使用32位寄存器目标意味着内存的32位操作数大小。 BSR要求它们匹配,就像movzxmovsx以外的几乎所有其他指令一样。

© www.soinside.com 2019 - 2024. All rights reserved.