xor eax, eax will always set eax to zero, right? So, why does MSVC++ sometimes put it in my executable’s code? Is it more efficient that mov eax, 0?
012B1002 in al,dx
012B1003 push ecx
int i = 5;
012B1004 mov dword ptr [i],5
return 0;
012B100B xor eax,eax
Also, what does it mean to do in al, dx?
Yes, it is more efficient.
The opcode is shorter than
mov eax, 0, only 2 bytes, and the processor recognizes the special case and treats it as amov eax, 0without a false read dependency oneax, so the execution time is the same.