Может ли "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 операнда регистра назначения. Смотрите руководство по процессору для деталей.

Другие вопросы по тегам