Любой способ переместить 2 байта в 32-битной x86, используя MOV, не вызывая переключения режима или остановки процессора?

Если я хочу переместить 2 неподписанных байта из памяти в 32-разрядный регистр, могу ли я сделать это с помощьюMOV инструкция и нет режима переключения?

Я заметил, что вы можете сделать это сMOVSE а такжеMOVZE инструкции. Например, сMOVSE кодировка0F B7 перемещает 16 бит в 32-битный регистр. Это инструкция из 3 циклов.

В качестве альтернативы, я думаю, я мог бы переместить 4 байта в регистр и затем каким-то образом CMP только два из них как-то.

Какая самая быстрая стратегия для получения и сравнения 16-битных данных на 32-битной x86? Обратите внимание, что я в основном выполняю 32-битные операции, поэтому я не могу переключиться в 16-битный режим и оставаться там.

К сведению непосвященных: проблема в том, что 32-разрядные процессоры Intel x86 могутMOV 8-битные данные и 16-битные ИЛИ 32-битные данные в зависимости от того, в каком режиме они находятся. Этот режим называется настройкой «D-бит». Вы можете использовать специальные префиксы 0x66 и 0x67, чтобы использовать режим не по умолчанию. Например, если вы находитесь в 32-разрядном режиме и перед командой указывается 0x66, это приведет к тому, что операнд будет считаться 16-разрядным. Единственная проблема заключается в том, что это приводит к значительному снижению производительности.

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

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