在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
,以帮助编译器/汇编器使用这种较短的编码。