Почему инструкции x86-64 для 32-битных регистров обнуляют верхнюю часть полного 64-битного регистра?

вx86-64 Обзор руководств Intel, Я читаю

Perhaps the most surprising fact is that an instruction such as MOV EAX, EBX automatically zeroes upper 32 bits of RAX register.

Документация Intel (3.4.1.1 Регистры общего назначения в 64-битном режиме в базовой архитектуре), приведенная в том же источнике, говорит нам:

64-bit operands generate a 64-bit result in the destination general-purpose register. 32-bit operands generate a 32-bit result, zero-extended to a 64-bit result in the destination general-purpose register. 8-bit and 16-bit operands generate an 8-bit or 16-bit result. The upper 56 bits or 48 bits (respectively) of the destination general-purpose register are not be modified by the operation. If the result of an 8-bit or 16-bit operation is intended for 64-bit address calculation, explicitly sign-extend the register to the full 64-bits.

В сборках x86-32 и x86-64, 16-битные инструкции, такие как

mov ax, bx

не показывать этот вид "странного" Поведение, что верхнее слово eax обнуляется.

Таким образом: какова причина, почему это поведение было введено? На первый взгляд это кажется нелогичным (но причина может заключаться в том, что я привык к особенностям сборки x86-32).

Ответы на вопрос(2)

Ваш ответ на вопрос