Lazarus FPC在ASM中拒绝64位值进行AND操作

3
以下代码无法编译:
and rax, $7FFFFFFFFFFFFFFF

我曾试着将该值设置为常量,甚至转换成 qword,但编译器仍然抛出 "dword value exceeds bounds" 的错误。

显然,这是一个 qword 而不是 dword。我该如何让编译器明白这一点呢?

需要注意的是,64 位代码在其他方面都可以正确编译和运行。

我使用的是最新版本的 Lazarus。

1个回答

5

x86指令集中没有使用imm64操作数的AND变体。您可以使用mov r64,imm64,然后使用and r/m64,r64


哇,我没想到会这样。谢谢你。 - IamIC
1
@IanC:在长模式下使立即操作数为64位会大大膨胀代码。引入许多具有imm64操作数的新操作码将使用大量操作码空间并增加解码器的复杂性。 - Peter Cordes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接