Assembly Lazarus FPC拒绝ASM中的和运算的64位值

Assembly Lazarus FPC拒绝ASM中的和运算的64位值,assembly,x86-64,freepascal,lazarus,Assembly,X86 64,Freepascal,Lazarus,无法编译以下内容: and rax, $7FFFFFFFFFFFFFFF 我尝试将该值设置为常量,甚至转换为qword,但编译器抛出“dword值超出边界” 当然,这是一个qword,不是dword。如何让编译器实现这一点 请注意,64位代码在其他方面编译和运行正常 我有最新的Lazarus版本。x86指令集中没有采用imm64操作数的和变体。您可以使用mov r64,imm64,然后是和r/m64,r64哇,我没想到会这样。谢谢。@IanC:在长模式下生成64位立即操作数会使代码膨胀很多。引

无法编译以下内容:

and rax, $7FFFFFFFFFFFFFFF
我尝试将该值设置为常量,甚至转换为qword,但编译器抛出“dword值超出边界”

当然,这是一个qword,不是dword。如何让编译器实现这一点

请注意,64位代码在其他方面编译和运行正常


我有最新的Lazarus版本。

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

哇,我没想到会这样。谢谢。@IanC:在长模式下生成64位立即操作数会使代码膨胀很多。引入大量带有imm64操作数的新操作码会占用大量操作码空间,并增加解码器的复杂性。