Подтвердить что ты не робот

Какова цель команд поворота (ROL, RCL на x86)?

Я всегда задавался вопросом, для чего предназначены команды вращения некоторых процессоров (например, ROL, RCL на x86). Какое программное обеспечение использует эти инструкции? Сначала я думал, что они могут использоваться для хэш-кодов шифрования/вычислений, но эти библиотеки написаны обычно на C, у которых нет операторов, которые соответствуют этим инструкциям.
Кто-нибудь нашел для них использование? Почему они добавили в набор инструкций?

4b9b3361

Ответ 1

Поворот требуется для сдвига бит по нескольким словам. Когда вы SHL нижнее слово, бит высокого порядка выливается в перенос. Чтобы завершить операцию, вам нужно сдвинуть более высокое слово (слова), доведя перенос до младшего разряда. RCL - это инструкция, которая выполняет это.

                      High word             Low word         CF
Initial          0110 1001 1011 1001   1100 0010 0000 1101    ?
SHL low word     0110 1001 1011 1001   1000 0100 0001 1010    1
RCL high word    1101 0011 0111 0011   1000 0100 0001 1010    1 

ROL и ROR полезны для изучения значения побита таким образом, который (в конечном счете) является неразрушающим. Они также могут использоваться для шунтирования битовой маски вокруг, не внося мусорные биты.

Ответ 2

Коды смены поворота ROL, RCL, ROR, RCR) используются почти исключительно для расчетов хеширования и CRC. Они довольно загадочны и очень редко используются.

Коды сдвига (SHL, SHR) используются для быстрого умножения по степеням 2 или для перемещения младшего байта в старший байт большого регистра.

Разница между ROL и SHL заключается в том, что ROL занимает высокий бит и сворачивает его в положение с низким битом. SHL выбрасывает высокий бит и заполняет нижнее битовое положение нулем.

Ответ 3

ROR ROL являются "историческими", но по-прежнему полезны различными способами.

Перед 80386 (и опкодом BT) ROL будет использоваться много для тестирования бит (SHL не распространяется на флаг переноса) - на самом деле в 8088 ROR/ROL будет сдвигаться только на 1 бит за раз!!!!

Также, если вы хотите сдвинуть один и тот же путь, не теряя битов, которые были смещены из области видимости, вы должны использовать ROR/ROL вместо SHR/SHL

Ответ 4

Если я правильно вас понимаю, ваш вопрос таков:

"Учитывая тот факт, что инструкции по ротации выглядят очень целевыми и не испускаются компиляторами, когда они фактически используются и почему они включены в процессоры?".

Ответ двоякий:

  • Процессоры не предназначены специально для выполнения программ на C. Скорее, они разработаны как машины общего назначения, предназначенные для решения широкого круга проблем с использованием самых разных инструментов и языков.

  • Разработчики языка не обязаны использовать каждый код операции в CPU. Фактически, большую часть времени они этого не делают, потому что некоторые инструкции процессора являются высокоспециализированными, а разработчику языка не требуется настоятельная необходимость их использования.

Более подробную информацию о побитовых операциях (и о том, как они относятся к программированию на С) можно найти здесь: http://en.wikipedia.org/wiki/Bitwise_operation

Ответ 5

Назад, когда сначала были созданы микропроцессоры, большинство программ были записаны в сборке, а не скомпилированы. Большинство инструкций процессора, вероятно, не испускаются компиляторами (что является стимулом для создания RISC), но их сравнительно легко реализовать в аппаратном обеспечении.

Многие алгоритмы в графике и криптографии используют поворот, а их включение в ЦП позволяет писать очень быстрые алгоритмы в сборке.