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