在64位x86 CPU下,通常我们将-1加载到寄存器中,例如:

mov     rdx, -1  //  48BAFFFFFFFFFFFFFFFF

...此操作码占用10个字节。
另一种方法是:
xor     rdx, rdx //  4831D2
dec     rdx      //  48FFCA



...此操作码仅占用6个字节。
编辑:
正如JensBjörnhager所说(我已经测试过),xor edx, edx操作码应清除整个rdx寄存器:
xor     edx, edx //  31D2
dec     rdx      //  48FFCA

...此操作码仅占用5个字节。
编辑:
亚历克斯找到另一个解决方案:
mov     rdx, -1  // 48C7C2FFFFFFFF

...此操作码仅占用7个字节。
但是如何告诉编译器使用较短的操作码(不使用DB)?
...
什么更快,更经济?

最佳答案

还有一个替代的7字节mov rdx, -1编码:48C7C2FFFFFFFF。

您可以尝试在代码中将指令写为mov rdx, dword -1,以帮助编译器/汇编器使用这种较短的编码。

08-15 16:50