当使用
我得到了这个输出:
因为在汇编时,
nasm
组装此代码时:BITS 64
mov eax, 0x1
mov rax, 0x1
我得到了这个输出:
b8 01 00 00 00 b8 01 00 00 00
这是将 mov eax, 0x1
重复两次的操作码。
这是否意味着 mov rax, 0x1
总是可以被 mov eax, 0x1
替换,还是只有在这种情况下才能替换?
如果正确的话,使用它会比以下代码更好:
xor rax, rax
inc rax
因为在汇编时,
mov eax, 0x1
只有5个字节,而mov rax, 0x1
在组合时需要6个字节。
xor eax, eax
/inc eax
是4B,比mov eax, 1
稍微小一点。但是除非你在大量优化代码大小,否则不要使用它。对于现代CPU来说,花费1个字节来节省一条指令(和一个融合域uop)是值得的。 - Peter Cordesmov rax,strict dword/qword 1
](https://dev59.com/2Kjka4cB1Zd3GeqPDsAH#48597025)来强制使用7/10字节版本的mov。 - phuclv