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.