Ответ 1
Всегда. Большинство (если не все) 32-битных MOV и ALU-операций очищают биты с 32 по 63 операнда регистра назначения. Подробнее см. В руководстве по процессору.
При сборке этого кода с 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
поскольку при сборке становится 6 байтов, а mov eax, 0x1
- всего 5 байтов?
Всегда. Большинство (если не все) 32-битных MOV и ALU-операций очищают биты с 32 по 63 операнда регистра назначения. Подробнее см. В руководстве по процессору.