Любой способ переместить 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-разрядным. Единственная проблема заключается в том, что это приводит к значительному снижению производительности.