我有以下代码:
sub rsp, 40 ; 00000028H
lea rcx, OFFSET FLAT:$SG4237
call printf
xor eax, eax
add rsp, 40 ; 00000028H
ret 0
为什么有xor eax, eax
,而不是xor rax, rax
?
我有以下代码:
sub rsp, 40 ; 00000028H
lea rcx, OFFSET FLAT:$SG4237
call printf
xor eax, eax
add rsp, 40 ; 00000028H
ret 0
为什么有xor eax, eax
,而不是xor rax, rax
?
在 x64 中,对 32 位寄存器的任何操作也会清除相应 64 位寄存器的前 32 位,因此无需使用xor rax, rax
它需要额外的 REX 字节进行编码。