Qualquer maneira de mover 2 bytes em x86 de 32 bits usando MOV sem causar uma mudança de modo ou CPU?

Se eu quiser mover 2 bytes não assinados da memória para um registrador de 32 bits, posso fazer isso com umMOV instrução e nenhum interruptor de modo?

Eu percebo que você pode fazer isso com oMOVSE eMOVZE instruções. Por exemplo, comMOVSE a codificação0F B7 move 16 bits para um registrador de 32 bits. É uma instrução de 3 ciclos, no entanto.

Alternativamente, eu acho que eu poderia mover 4 bytes para o registrador e, de alguma forma, CMP apenas dois deles de alguma forma.

Qual é a estratégia mais rápida para recuperar e comparar dados de 16 bits em x86 de 32 bits? Observe que estou fazendo principalmente operações de 32 bits, por isso não posso alternar para o modo de 16 bits e ficar lá.

FYI para os não iniciados: o problema aqui é que os processadores Intel x86 de 32 bits podemMOV Dados de 8 bits e dados de 16 bits ou 32 bits, dependendo do modo em que estão. Esse modo é chamado de configuração "D-bit". Você pode usar os prefixos especiais 0x66 e 0x67 para usar um modo não padrão. Por exemplo, se você estiver no modo de 32 bits e prefixar a instrução com 0x66, isso fará com que o operando seja tratado como 16 bits. O único problema é que isso causa um grande impacto no desempenho.

questionAnswers(2)

yourAnswerToTheQuestion